'Syft'를 사용해 디지털 의료기기 SBOM 구현

2024. 11. 27. 13:51Project

반응형
SMALL

 

 

안녕하세요! 오늘은 디지털 의료기기 앱 ‘Trost’를 가상환경에 저장하고 분석하는 과정을 자세히 살펴보겠습니다. 

이 과정을 통해 소프트웨어 구성 요소를 안전하게 관리하는 데 필요한 중요한 정보들을 얻게 될 것입니다.

 

 

SBOM 구현을 진행하기 위한 가상 환경 구성은 Linux 가상환경에서 진행했다.

 

 

 

리눅스 환경에서의 SBOM(Software Bill of Materials) 구현을 성공적으로 수행하기 위한 단계로, 우선 VMware를 활용하여 가상 환경을 구축하기로 결정했다. 이에 따라 최신 버전의 우분투를 선택하여 가상 머신을 설정하였으며, 이 가상 머신 위에 다수의 개발 도구와 라이브러리를 설치하여 개발 환경을 최적화하였다.

 

SBOM 구현을 위해 설치한 여러 도구와 라이브러리 나타낸다

fabric@fabric-virtual-mach ic-virtual-machine:$ lsb_release a #시스템 배포판 정보를 출력
No LSB modules are available.
Distributor ID: Ubuntu # 배포판의 ID'Ubuntu'
Description: Ubuntu 22.04.2 LTS
Release: 22.04 # 배포판의 버전
Codename: iammv




root@fabric-virtual-machine:/home/fabric# java -version
openjdk version "11.0.22" 2024-01-16 # java 버전




root@fabric-virtual-machine: /home/fabric# jq-version
jq version “1.6” # jp 버전




root@fabric-virtual-machine: /home/fabric# apktool version
2.5.0-dirty # apktool 버전

 

Ubuntu 22.04.2 LTS 운영 체제를 기반으로 한 환경에서 다양한 도구의 버전을 확인하였다. 시스템 배포판 정보에 따르면, 사용 중인 운영 체제는 'Ubuntu'로, 배포판 버전은 22.04이며, 코드네임은 'iammv'이다. 또한, 데이터 처리 도구인 jq의 버전은 1.6으로 확인되었고, APK 분석 도구인 apktool의 버전은 2.5.0-dirty로 나타났다. 마지막으로, Java 런타임 환경은 OpenJDK 11.0.22 버전이 사용되고 있음을 확인하였다.

 

# Trost 앱 저장하기

디지털 의료기기인 ‘Trost’를 가상환경 내에 저장하기 위한 작업을 수행하였으며, 이 과정에서 먼저 해당 기기의 데이터를 가상환경에 저장하는 절차를 진행하였다.

 

가상환경에서 ‘Trost’를 저장하는 과정은 다음과 같습니다. 사용자가 터미널에서 다운로드 명령어를 입력하면, 앱 파일을 쉽게 받을 수 있다.

wget -O [파일명] [다운로드 링크]

 

이 명령어로 Trost의 apk 파일을 다운로드한 후, 가상환경에 저장하면 된다.

 

root@sbom-virtual-machine:/home/sbom/Down loads# wget -0 Trost.apk 'https://download.apkcombo.com/com.hum art.trost2/%ED%8A%B8%EB%A1%9C%EC%8A%A4%ED%8A%B8%20-%20%EC%8B%AC%EB%A6%AC%EC%83%81%EB%8B%B4,%20ASMR,%20%EB%AA%85%EC%83%81%20%EC%95%81_4.50.1_apkcombo.com.apk?ecp=Y29tLmh1bWFydCS0cm9zdDIvNC41MC4xLzQxNS4wMzBmYTg 1NDY3MTJhNjFhMDRjMDY2NTUwNGRkYmJmNTZiZTAxNGYxLmFwaw==&lat=1718018948&sig=dedac3ee3668defd1b9b2edc73834b3 8&size=76355201&from=cf&version=latest&lang=ko&fp=238a992012bbec7d1358289585259959&lp=218.159.69.254'--2024-06-10 21:50:47--https://download.apkcombo.com/com.humart.trost2/%ED%8A%B8%EB%A1%9C%EC%8A%A4%ED% 8A%88%20-%20%EC%8B%AC%EB%A6%AC%EC%83%81%EB%8B%B4,%20ASMR,%20%EB%AA%85%EC%83%81%20%EC%95%B1_4.50.1_apkcom bo.com.apk?ecp=Y29tLmh1bWFydC50cm9zdDIvNC41MC4xLzQxNS4wMzBmYTg1NDY3MTJhNjFhMDRjMDY2NTUwNGRkYmJmNTZiZTAXN GYXLmFwaw==&lat=1718018948&sig=dedac3ee3668defd1b9b2edc73834b38&size=76355201&from=cf&version=latest&lan g=ko&fp=238a992012bbec7d1358289585259959&ip=218.159.69.254 Resolving download.apkcombo.com (download.apkcombo.com)... 184.18.12.27, 104.18.13.27 Connecting to download.apkcombo.com (download.apkcombo.com) 104.18.12.27:443...20-%20%EC%8B%AC%EB%A6%AC%EC%83%81%EB%8B%B4,%20ASMR,%20%EB%AA%85%EC%83%81%20%EC%95%B1_4.50.1_apkcombo.co m.apk?ecp=Y29tLmh1bWFydC50cm9zdDIvNC41MC4xLzQxNS4wMzBmYTg1NDY3MTJhNjFhMDRjMDY2NTUwNGRkYmJmNTZIZTAXNGYxLm Fwaw%3D%3D&lat=1718018948&sig=873933a5b9ca06a2f84de41d4833fc17&size=76355201&from=cf&version=latest&lang =ko&fp=238a992012bbec7d1358289585259959&ip=218.159.69.254 Resolving con.apkflash.net (cdn.apkflash.net)... 104.18.25.123, 104.18.24.123 Connecting to cdn.apkflash.net (cdn.apkflash.net)|104.18.25.123:443...connected. HTTP request sent, awaiting response... 200 Length: 76355201 (73M) [application/vnd.android.package-archive]
Saving to: 'Trost.apk’


Trost.apk 100%[=================>] 72.82M 10.4MB/s in 6.75


2624-06-10 21:50:54 (10.9 MB/s) 'Trost.apk' saved [76355201/76355201]

 

 

‘Trost’를 가상환경 내에 저장하는 구체적인 과정을 시각적으로 나타내고 있으며, 이러한 시각 자료를 통해 사용자는 가상환경에서의 저장 작업이 어떻게 이루어지는지 보다 명확하게 이해할 수 있게 된다

 

# Trost 앱 압축 해제하기

Trost의 apk 파일을 단순히 다운로드하는 것에서 끝나는 것이 아니라 파일의 내용을 들여다보기 위해 압축 해제를 해야 한다.

 

압축해제를 할 때에는 unzip [파일명] -d [디렉토리명령어를 통해 압축해제를 할 수 있다. 압축해제 명령어는 다음과 같다.

unzip Trost.apk -d

 

root@sbom-virtual-machine:/home/sbo m/Downloads# unzip Trost.apk -d /home/sbom/Downloads/Trost Archive: Trost.apk
inflating: /home/sbom/Downloads/Trost/META-INF/com/android/build/gradle/app-metadata.properties
extracting: /home/sbom/Downloads/Trost/assets/dexopt/baseline.prof
inflating: /home/sbom/Downloads/Trost/classes.dex inflating: /home/sbom/Downloads/Trost/classes2.dex
inflating: /home/sbom/Downloads/Trost/classes3.dex inflating: /home/sbom/Downloads/Trost/classes4.dex
extracting: /home/sbom/Downloads/Trost/lib/arm64-v8a/librealm-jni.so
extracting: /home/sbom/Downloads/Trost/lib/armeabi-v7a/librealm-jni.so
extracting: /home/sbom/Downloads/Trost/lib/x86/librealm-jni.so
extracting: /home/sbom/Downloads/Trost/lib/x86_64/librealm-jni.so

 

 

# SBOM 생성하기

 

이제 Trost에서 사용된 소프트웨어 구성 요소를 확인해 보겠습니다. SBOM(Software Bill of Materials)을 생성하기 위해 Syft 도구를 사용한다.

 

syft scan dir:/home/sbom/Downloads/trost

 

 

 

root@sbom-virtual-machine: /home/sbom/Downloads# syft scan dir:/home/sbom/Downloads/trost


Indexed file system /home/sbom/Downloads/trost
Cataloged contents 224dea7f4c807ce80579877257cba89ca795d149bc9
Packages [0 packages]
Executables [4 executables]
[0000] WARN no explicit name and version provided for directory source, derivin No packages discovered

 

syft scan 명령어를 사용하여 /home/sbom/Downloads/Trost 디렉토리를 분석한 결과, 패키지는 발견되지 않았지만 4개의 실행 파일이 존재하며, 해당 디렉토리에 대한 명시적 이름과 버전이 제공되지 않았음을 경고하는 메시지가 출력되었다.

 

 

다음은 Syft 도구를 사용하여 ‘Trost’ 파일을 SPDX 형식으로 출력한 결과이다.

 

spdxversion: "SPDX-2.3",
"dataLicense": "CC0-1.0",
“SPDXID”: “SPDXRef-DOCUMENT”,
"name": "/home/sbon/Downloads/Trost",
“documenthanespace": "https://anchore.com/syft/dir/home/sbon/Downloads/Trost-26a66de9-28c7-48ff-9387-75371eeba8a6",
"creationInfo": {
"licenseListVersion": "3.24",
"Organization: Anchore, Inc",
"Tool: syft-1.5.0"
],
"created": "2024-06-10T13:52:17Z },
“packages":[
{
"name":"/home/sbon/Downloads/Trost",
"SPDXID": "SPOXRef-DocumentRoot-Directory-hone-sbon-Downloads-Trost",
"supplier": "NOASSERTION",
"downloadLocation”: "NOASSERTION",
"FilesAnalyzed": false,
"LicenseConcluded”: "NOASSERTION",
"Licensebeclared: "NOASSERTION,
"primaryPackagePurpose": "FILE"
}
],
“relationships” [
"spdxElement: "SPOXREF-DOCUMENT",
"relatedSpdxElement:"SPDXREF-DocumentRoot-Directoryhome-sbon-Downloads-Trost",
"relationshipType": "DESCRIBES" } } } ] }
# SPDX 버전
# 데이터 라이센스
# 문서 고유 식별자
# 파일 경로
# 고유 네임스페이스 URL
# 라이센스 목록 버전
# 생성 조직
# 사용 도구 및 버전
# 생성 날짜 및 시간

# 패키지 경로
# 패키지 고유 식별자
# 공급자 정보 없음
# 다운로드 위치 정보없음
# 파일 분석 여부
# 라이센스 정보 없음
# 라이센스 정보 없음
# 패키지 주요 목적

# 주체 SPDX 요소
# 관련 SPDX 요소
# 관계 유형

 

Syft 도구가 디지털 의료기기인 ‘Trost’를 분석한 후 생성한 SBOMSPDX-JSON 형식으로 출력한 결과를 보여주고 있다.

 2024610일에 생성되었으며, 해당 문서에는 "NOASSERTION"으로 표시된 공급자와 라이선스 정보가 포함되어 있으며, 분석된 파일은 존재하지 않음을 나타내고, 주목적은 파일로 정의되어 있다는 점에서, 이 디렉토리는 추가적인 패키지 정보가 대부분 비어 있는 상태임을 확인할 수 있다.

 

다음은 syft 도구를 사용하여 ‘Trost’ 파일을 CycloneDX 형식으로 출력한 결과이다.

 

"$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json",
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"serialNumber": "urn:uuid:cdfa9d8e-e637-4b4c-9672-3968323b22e3",
"version": 1,
"metadata": {
"timestamp": "2024-06-16T22:54:17+09:00",
"tools": {
"components": [
{
"type": "application",
"author": "anchore",
"name": "syft",
"version": "1.5.0"
}
]
}
},
"component": {
"bom-ref": "d93986ee01fa56b8",
"type": "file",
"name": "/home/sbom/Downloads/Trost"
}
}
# 스키마 URL
# BOM 포맷
# 사양 버전
# 고유 일련 번호
# 버전 번호


# 생성 시간
# 도구 정보




# 도구 유형
# 도구 작성자
# 도구 이름
# 도구 버전






# 컴포넌트 정보


# BOM 참조 ID
# 컴포넌트 유형
# 컴포넌트 경로



 

"bom-ref" 항목인 "d93986 ee01 fa56 b8"는 특정 소프트웨어 구성 요소를 고유하게 식별하는 참조 번호로, 이 참조를 통해 해당 소프트웨어의 출처와 관련된 정보를 추적할 수 있음을 시사하며, "type""file"로 설정된 점은 분석 대상이 파일임을 명확히 하고, "name" 항목의 "/home/sbom/Downloads/Trost" 경로는 해당 소프트웨어의 저장 위치를 나타내고 있다.

 

디지털 의료기기 앱 ‘Trost’를 가상환경 내에 저장하고, 압축 해제를 통해 앱의 구조를 이해하는 과정은 매우 유익했다. 또한, SBOM을 통해 소프트웨어의 구성 요소를 철저히 분석할 수 있었다.

 

반응형
LIST