VulnDbGen官方文档翻译
취약점 데이터베이스 생성 솔루션 1.0
소프트웨어 매뉴얼
漏洞数据库创建解决方案1.0
软件手册
2017. 7. 17.
CSSA – Center for Software Security and Assurance
목 차
目录
- Git repository 클론 8
- CVE 패치 추출: get_cvepatch_from_git.py 8
- 패치 전/후 함수 복원: get_source_from_cvepatch.py 9
- 중복된 취약 소스 제거: vul_dup_remover.py 10
- 오탐 케이스 일괄 제거: vul_verifier.py 10
H. 취약 소스의 해시 인덱스 파일 생성: vul_hidx_generator.py 10
1.概述3
A.手册信息3
B.主题3
C.文档版本历史3
2.组件4
A.解决方案组件4
B.核心模块清单4
C.解决方案概述5
3.要求6
A.支持的操作系统6
B.操作系统的依赖程序6
i.Windows 6
ii.macOS 6
iii.Linux 6
4.基本用法7
A.配置:config.py 7
我普通7
ii.POSIX 7
iii.Windows 7
B.初始化:initialize.py 7
我普通7
ii。 Windows 7
C.Git存储库克隆8
D.CVE修补程序提取:get_cvepatch_from_git.py 8
E.在补丁之前和之后恢复功能:get_source_from_cvepatch.py 9
F.消除重复的易受攻击源:vul_dup_remover.py 10
G.批量清除误报案件:vul_verifier.py 10
H.为易受攻击的源创建哈希索引文件:vul_hidx_generator.py 10
5,多模式使用11
答:什么是多模式? 11
B.多个Git存储库克隆11
C.创建列表文件11
D. CVE修补程序提取和修补程序前/后功能恢复过程12
E.后期处理12
6.支持13
A.查询13
B.联系信息13
7.参考文献13
1. 개요
A. 매뉴얼 정보
본 매뉴얼은 “취약점 데이터베이스 생성 솔루션 1.0” 소프트웨어의 매뉴얼임.
취약점 데이터베이스 생성 솔루션은 Center for Software Security and Assurance (이하 CSSA) 가 개발한 소프트웨어 취약점 탐지 플랫폼 IoTcube (https://iotcube.net) 의 “Vulnerable Code Clone Detection” 에 사용된 핵심 기술임.
본 매뉴얼은 삼성전자 소프트웨어 센터 Security Lab. 의 실무자를 대상으로 작성되었음.
C. 문서 버전 기록
릴리즈 날짜 |
문서 버전 |
사유 |
작성자 |
2017년 7월 17일 |
V1.0 |
초판 |
김슬배 ([email protected]) |
1.概述
A.手册信息
本手册是“漏洞数据库创建解决方案1.0”软件的手册。
漏洞数据库创建解决方案是IoTcube(https://iotcube.net)的“漏洞代码克隆检测”中使用的核心技术,IoTcube是由软件安全和保证中心(以下简称CSSA)开发的软件漏洞检测平台。
B.目标
本手册适用于三星电子软件中心安全实验室。 它是为从业者编写的。
C.文档版本历史
发布日期文档版本原因作者
2017年7月17日V1.0第一版Seulbae Kim([email protected])
3. 요구 사항需求条件
A. 지원 운영 체제
본 솔루션은 POSIX 호환 운영체제(Linux, macOS)와 Windows를 지원함.
A.支持的操作系统
该解决方案支持POSIX兼容操作系统(Linux,macOS)和Windows。
B. 운영 체제별 의존 프로그램操作系统相关程序
-
-
-
-
Windows
- Python 2 (권장: 2.7 이상) (https://www.python.org/downloads)
-
Windows
-
-
-
-
-
-
- Git for Windows (https://git-for-windows.github.io)
-
-
-
Python 2 (권장: 2.7 이상), Git, Java 필요. 다음 명령으로 설치 가능.
Python 2 (권장: 2.7 이상), Git, Java 필요. 다음 명령으로 설치 가능.
Python 2(推荐:2.7或更高版本),Git,需要Java。 可以使用以下命令安装。
4. 기본 사용법基本用法
솔루션 사용에 앞서, config.py를 설정해야 함.
使用该解决方案之前,您需要配置config.py。
- gitStoragePath: 취약점을 수집할 Git repository를 clone할 루트 디렉터리.
- version: IoTcube 사용 시 유효 데이터베이스 버전. 일반적인 경우 설정하지 않아도 무방함.
i普通
- gitStoragePath:用于克隆Git存储库以收集漏洞的根目录。
- version:使用IoTcube时的有效数据库版本。 通常情况下,无需设置
Package manager를 통해 git과 java를 설치한 경우, 아래의 default 값을 사용.
如果git和java是通过Package Manager安装的,请使用下面的默认值。
Custom build 사용 시 각각에 해당하는 path와 binary명 기입.
使用自定义构建时,请分别编写对应的路径和二进制名称。
Git for Windows (혹은 다른 설치 방법)를 통해 설치된 git.exe와 diff.exe의 정확한 path와 binary명을 입력.
输入通过Windows版Git安装的git.exe和diff.exe的正确路径和二进制名称(或其他安装方法)。
initialize.py는 필수 디렉터리를 생성하며, National Vulnerability Database에 등록된 CVE 정보를 수집하여 vulnDBGen/data/cvedata.pkl 파일에 저장.
윈도우에서 초기화 시, 윈도우용 파서인 FuncParser-opt.exe를 다운로드 받아
vulnDBGen/tools 에 저장함. (POSIX용 파서는 프로젝트 패키지에 미리 포함.)
B.初始化:initialize.py
i。普通
initialize.py创建所需的目录,收集在国家漏洞数据库中注册的CVE信息,并将其存储在vulnDBGen / data / cvedata.pkl文件中。
(initialize.py会调用执行cveXmlDownloader.py cveXmlParser.py cveXmlUpdater.py)
ii.Windows
在Windows中初始化后,下载FuncParser-opt.exe,这是Windows的解析器。
保存在vulnDBGen /工具中。 (POSIX解析器预先包含在项目包中。)
위 명령은 tools/cvedatagen/ 이하의 cveXmlDownloader.py, cveXmlParser.py, 그리
고 cveXmlUpdater.py 를 순차적으로 실행하는데, 최초 실행을 통해 cvedata.pkl 이 생 성된 상태라면 이후 데이터 (신규 CVE 정보 등) 업데이트 시에는 cveXmlUpdater.py 만 단독으로 실행하면 됨.
또한, initialize.py 를 통해 자동으로 초기화하지 않고 직접 cveXmlDownloader.py, cveXmlParser.py, 그리고 cveXmlUpdater.py 를 순차적으로 실행하여도 그 결과물은 동 일함.
上面的命令是tools / cvedatagen /,下面是cveXmlDownloader.py,cveXmlParser.py和
高级别的cveXmlUpdater.py是按顺序执行的,如果在第一次执行时创建了cvedata.pkl,则在更新数据(例如新的CVE信息)时仅需要单独执行cveXmlUpdater.py。
此外,即使依次执行cveXmlDownloader.py,cveXmlParser.py和cveXmlUpdater.py,而无需通过initialize.py自动对其进行初始化,结果也相同。
취약점 추출을 위해서는 타겟 repository의 Git object가 필요함. Git object의 획득을 위해
config.py의 gitStoragePath에 지정한 경로에, 취약점을 수집할 Git repository를 클론.
ex) Apache HTTPD 와 Linux kernel Git repository 의 클론 과정
C.Git存储库克隆
要提取漏洞,需要目标存储库的Git对象。 获取Git对象
克隆Git存储库以收集config.py中git.Path指定的路径中的漏洞。
例)Apache HTTPD和Linux内核Git存储库的克隆过程
get_cvepatch_from_git.py 는 앞선 단계(4.C)에서 clone한 Git repository 에서 CVE 취약점 패치를 추출하여 vulnDBGen/diff/REPO_NAME/ 이하에 *.diff 파일로 저장.
D.CVE修补程序提取:get_cvepatch_from_git.py
get_cvepatch_from_git.py从上一步(4.C)中克隆的Git存储库中提取CVE漏洞补丁,并将其另存为vulnDBGen / diff / REPO_NAME /下的* .diff文件。
ex) HTTPD 와 Linux kernel repository 각각에서 CVE 패치 추출 과정每个CVE补丁提取过程
get_source_from_cvepatch.py 는 모인 CVE 취약점 패치로부터 패치 전 함수와 패치 후 함수를 각각 복원함. 복원된 함수들은 vulnDBGen/vul/REPO_NAME/ 이하에 저장되는데, 취약점 패치 전 함수는 취약 함수로서 *_OLD.vul, 패치 후의 함수는 안전한 함수로서
*_NEW.vul 로 저장됨.
ex) HTTPD 와 Linux kernel 각각의 CVE 패치로부터 패치 전/후 함수 복원
E.在补丁之前和之后恢复功能:get_source_from_cvepatch.py
get_source_from_cvepatch.py分别从收集的CVE漏洞补丁中恢复补丁前和补丁后功能。 恢复的功能存储在vulnDBGen / vul / REPO_NAME /下。补丁前功能是一个易受攻击的功能* _OLD.vul,补丁后功能是安全的功能。
* _NEW.vul已保存。
例)从HTTPD和Linux内核CVE补丁恢复前/后补丁功能
vulnDBGen/vul/ 이하에 저장된 모든 취약 함수들 중 중복된 파일을 하나만 남기고 제거함. ex) HTTPD 와 OpenSSL repository 의 취약 함수에서 중복 제거
F.消除重复的易受攻击源:vul_dup_remover.py
在vulnDBGen / vul /下存储的所有易受攻击的函数中,仅保留了一个重复文件并将其删除。 例如)从HTTPD和OpenSSL存储库中的易受攻击的函数中删除重复项
코드 클론 탐지 시 오탐을 유발하는 케이스는 본 모듈에서 일괄적으로 제거됨. 현재는 두 가지 제거 규칙을 적용하고 있으며, 규칙은 정책에 따라 임의로 추가/제거 할 수 있음.
규칙 1) Old function과 new function의 abstraction 결과가 같은 경우 삭제 규칙 2) 함수 헤더가 바뀌어 패치의 전/후 관계 식별이 불가한 경우 삭제
ex) HTTPD, OpenSSL, Linux kernel 의 취약 함수 수집 결과에서 오탐 케이스 제거
G.误判案例清除:vul_verifier.py
从该模块中删除了在检测代码克隆时导致误报的情况。 当前,应用了两个删除规则,并且可以根据该策略任意添加/删除规则。
规则1)当旧函数和新函数的抽象结果相同时规则2)当函数头被更改并且无法识别补丁前后的关系。
例如)从HTTPD,OpenSSL和Linux内核的易受攻击的函数收集结果中消除误报情况
앞선 과정 (A~G) 완료 시, 중복과 오탐 케이스가 제거된 취약 함수들만 vulnDBGen/vul/ 이하에 잔류. vul_hidx_generator.py 는 잔류 함수들의 해시 인덱스를 생성함. 생성된 해 시 인덱스는 *.hidx 확장자를 가지며, vulnDBGen/hidx/ 이하에 저장됨.
이 때, 용도에 따라 두 종류의 인덱스 생성 가능:
인자로 –a 0 을 사용할 경우 exact matching을 위한 인덱스 생성 인자로 –a 4 를 사용할 경우 abstract matching을 위한 인덱스 생성
H.创建易受攻击源的哈希索引文件:vul_hidx_generator.py
完成前面的步骤(A至G)后,只有漏洞重复且假阳性案例已删除的易受攻击的函数才会保留在vulnDBGen / vul /下。 vul_hidx_generator.py创建残留函数的哈希索引。 生成的哈希索引具有* .hidx扩展名,并存储在vulnDBGen / hidx /下。
此时,可以根据目的创建两种类型的索引:
当将-a 0用作参数时,用于精确匹配的索引创建–当将-a 4用作参数时,用于抽象匹配的索引创建
5. Multimode 사용법使用方法
Google Android Project (https://android.googlesource.com/) 처럼 다수의 Git repository가 하나의 프로젝트로 관리되는 경우, Multimode를 이용하여 일괄 처리 가능.
答:什么是多模式?
如果将多个Git存储库作为一个项目(例如Google Android Project(https://android.googlesource.com/))进行管理,则可以使用多模式进行批处理。
ex) Git repositories on Android
config.py 에 지정한 gitStoragePath 이하에 프로젝트명(e.g., android)으로 디렉터리 생성 후, 모든 repository를 클론.
ex) 안드로이드 프로젝트의 모든 Git sub-repository 클론 과정
B.多个Git存储库克隆
在config.py中指定的gitStoragePath下使用项目名称(例如android)创建目录后,克隆所有存储库。
例)Android项目的所有Git子存储库克隆过程
프로젝트의 sub-repository 목록을 보관할 리스트 파일은 vulnDBGen/data/repolists/
이하의 list_프로젝트명 파일에 저장.
ex) 안드로이드 프로젝트의 Git repository 리스트 파일 생성
创建C.List文件
保留项目的子存储库列表的列表文件是vulnDBGen / data / repolists /
保存在以下list_project名称文件中。
例如)创建Android项目的Git存储库列表文件
ex) 생성한 list_android 파일에 sub-repository의 리스트를 저장.
例如)将子存储库列表保存在创建的list_android文件中。
D. CVE 패치 추출 및 패치 전/후 함수 복원 과정
get_cvepatch_from_git.py 와 get_source_from_cvepatch.py 의 실행 방법은 동일 하나, -m 인자를 추가로 사용하여 Multimode를 활성화 함.
ex) 안드로이드 프로젝트의 모든 Git repository로부터 CVE 패치 추출 및 함수 복원
D. CVE修补程序提取和修补程序前/后功能恢复过程
get_cvepatch_from_git.py和get_source_from_cvepatch.py的执行方法是相同的,但是多模式是通过额外使用-m参数来**的。
例)从Android项目的所有Git存储库中提取CVE补丁并恢复功能
E. 이후 과정
이후의 과정은 4.E ~ 4.H 에 기술된 내용과 동일함.
E.后处理
后续过程与4.E至4.H中所述的过程相同。
6. 지원
A. 문의
솔루션 사용 중 문제가 발생 할 경우, 6.B의 연락처로 문의 바람.
6.支持
A.查询
如果在使用解决方案时出现问题,请通过6.B与我们联系。
B.联系方式
CSSA
Phone: (+82)2-3290-4816
E-mail: [email protected]
7. 참고 문헌参考文献
[1] Seulbae Kim, Seunghoon Woo, Heejo Lee, and Hakjoo Oh, "VUDDY: A Scalable Approach for Vulnerable Code Clone Discovery," in Security and Privacy (SP), 2017 IEEE Symposium on. IEEE. 2017.
[2] Seulbae Kim, Seunghoon Woo, Heejo Lee, and Hakjoo Oh, "Poster: IoTcube: An Automated Analysis Platform for Finding Security Vulnerabilities," in Security and Privacy (SP), 2017 IEEE Symposium on. IEEE. 2017.
[3] CSSA, “White-box testing in IoTcube,” https://iotcube.net/process/type/wf1, April 2016, Accessed: 2017-07-04