
Elasticsearch 기반 정적 코드 분석 도구

Bughound는 오픈소스 정적 코드 분석 도구로, 코드를 분석한 결과를 Elasticsearch와 Kibana로 전송하여 코드 내 잠재적 취약점에 대한 유용한 인사이트를 제공합니다.
Bughound는 대시보드가 미리 구성된 자체 Elasticsearch 및 Kibana Docker 이미지를 제공하며, 발견된 내용을 강력하게 시각화할 수 있습니다.
다음과 같은 다양한 유형의 취약점을 탐지할 수 있습니다:
현재 Bughound는 PHP와 JAVA 코드를 분석할 수 있으며, 이 언어들에 대한 안전하지 않은 함수 그룹을 포함하고 있습니다.
시간이 지남에 따라 더 많은 함수와 언어를 추가할 예정이지만, 현재는 프로젝트 자체의 안정성에 주력하고 있습니다.
Bughound의 결과는 100% 정확하지 않음을 유의하시기 바랍니다. 이 도구는 분석 과정에서 잠재적 약점을 식별하는 데 도움을 주기 위해 제작되었습니다.
먼저, Bughound는 감사하려는 파일 확장자를 기준으로 프로젝트 내 모든 파일 목록을 작성한 후, 각 파일을 읽고 프로젝트 언어에 대해 미리 정의된 안전하지 않은 함수를 찾습니다.
분석 단계는 사전 구성된 정규식과 일부 사용자 정의 텍스트 매칭을 사용하여 잠재적 취약점을 탐지합니다. 따라서 발견된 내용이 익스플로잇 가능한지 확인하려면 수동 분석이 필요합니다.
마지막으로, 결과를 Bughound Docker 이미지로 전송합니다. 이 이미지에는 미리 구성된 Elasticsearch와 Kibana가 포함되어 있으며, 발견된 내용에 맞춤화된 대시보드를 제공합니다.
대시보드는 발견 사항에 대한 다음과 같은 세부 정보를 제공합니다:
또한 Kibana를 사용하면 잠재적으로 취약한 코드 조각을 확인하여 익스플로잇 가능 여부를 분석하고 추적할 수 있습니다.
물론 원하는 경우 자체 ELK 스택을 사용할 수도 있으며, Bughound가 초기 구성을 수행하지만 이 경우 사전 구성된 대시보드는 제공되지 않습니다.
Bughound 코드를 실행하기 위한 모든 요구 사항은 다음 명령어로 설치할 수 있습니다:
pip3 install -r requirements.txt
이 명령어는 코드에 필요한 모든 요구 사항이 설치되도록 합니다.
또한 Bughound 이미지를 실행하려면 Docker를 설치해야 합니다. 이에 대한 자세한 내용은 다음 섹션에서 확인하세요!
자체 Elasticsearch 및 Kibana 인스턴스를 사용하려면 Docker 설치 단계를 건너뛰세요.
최신 버전의 Bughound를 다음 명령어로 다운로드하세요:
git clone https://github.com/mhaskar/Bughound
이전 단계에서 요구 사항을 설치한 후, 다음 명령어로 Bughound를 실행할 수 있습니다:
./bughound.py
Bughound의 메인 화면이 나타납니다.
┌─[askar@hackbook]─[/opt/bughound]
└──╼ $./bughound.py
.______ __ __ _______ __ __ ______ __ __ .__ __. _______
| _ \ | | | | / _____|| | | | / __ \ | | | | | \ | | | \
| |_) | | | | | | | __ | |__| | | | | | | | | | | \| | | .--. |
| _ < | | | | | | |_ | | __ | | | | | | | | | | . ` | | | | |
| |_) | | `--' | | |__| | | | | | | `--' | | `--' | | |\ | | '--' |
|______/ \______/ \______| |__| |__| \______/ \______/ |__| \__| |_______/
\ /
oVo
\___XXX___/
__XXXXX__
/__XXXXX__\
/ XXX \
V V1.0 Beta
[+] Example: ./bughound3.py --path vulnerable_code/ --language php --extension .php --name testproject
usage: bughound.py [-h] [--path PATH] [--git GIT] --language LANGUAGE
--extension EXTENSION --name NAME [--verbose [VERBOSE]]
bughound.py: error: argument --language is required
┌─[✗]─[askar@hackbook]─[/opt/bughound]
└──╼ $
Bughound Docker 이미지를 설치하려면 다음 명령어를 실행하면 됩니다:
docker pull bughound/bughound
그러면 최신 버전의 이미지를 가져와서 로컬에 저장합니다.
이미지를 가져온 후 다음 명령어로 실행할 수 있습니다:
docker run --name bughound -p5601:5601 -p 9200:9200 bughound/bughound
이 명령어는 bughound라는 새 컨테이너에서 이미지를 실행하고, Bughound가 Elasticsearch 및 Kibana와 호스트 간 통신에 필요한 포트를 노출합니다.
이미지를 사용하려면 가상 메모리 최대값을 늘려야 할 수 있습니다. 다음 명령어를 실행하세요:
sysctl -w vm.max_map_count=262144
이 두 가지 작업을 완료하면 Bughound를 사용할 준비가 됩니다!
코드 분석 프로세스를 시작하려면 몇 가지 옵션이 있는 Bughound.py 파일을 사용해야 합니다. 도움말 배너를 통해 옵션을 확인하려면 다음 명령어를 사용하세요:
┌─[✗]─[askar@hackbook]─[/opt/bughound]
└──╼ $./bughound.py -h
.______ __ __ _______ __ __ ______ __ __ .__ __. _______
| _ \ | | | | / _____|| | | | / __ \ | | | | | \ | | | \
| |_) | | | | | | | __ | |__| | | | | | | | | | | \| | | .--. |
| _ < | | | | | | |_ | | __ | | | | | | | | | | . ` | | | | |
| |_) | | `--' | | |__| | | | | | | `--' | | `--' | | |\ | | '--' |
|______/ \______/ \______| |__| |__| \______/ \______/ |__| \__| |_______/
\ /
oVo
\___XXX___/
__XXXXX__
/__XXXXX__\
/ XXX \
V V1.0 Beta
[+] Example: ./bughound3.py --path vulnerable_code/ --language php --extension .php --name testproject
usage: bughound.py [-h] [--path PATH] [--git GIT] --language LANGUAGE
--extension EXTENSION --name NAME [--verbose [VERBOSE]]
optional arguments:
-h, --help show this help message and exit
--path PATH local path of the source code
--git GIT git repository URL
--language LANGUAGE the used programming language
--extension EXTENSION
extension to search for
--name NAME project name to use
--verbose [VERBOSE] show debugging messages
┌─[askar@hackbook]─[/opt/bughound]
└──╼ $
예를 들어, 로컬 PHP 프로젝트를 스캔하려면 다음 명령어를 사용할 수 있습니다:
./bughound.py --path /opt/dummyproject --language php --extension .php --name dummyproject
이 명령어는 Elasticsearch 인덱스에 "dummyproject"라는 새 프로젝트를 생성하고, 로컬 경로 "/opt/dummyproject"에서 확장자가 ".php"인 모든 로컬 파일을 크롤링하여 결과를 Elasticsearch로 전송합니다.
또한, --git 스위치를 사용하여 git 저장소에서 원격 프로젝트를 가져올 수도 있습니다:
./bughound.py --git https://github.com/DummyCode/DummyProject --language php --extension .php --name dummyproject
Bughound가 코드를 복제하여 projects 디렉토리에 저장한 후 스캔을 수행합니다.
공식 Bughound Docker 이미지를 사용하기로 결정했다면, 분석에 도움이 될 몇 가지 즉시 사용 가능한 대시보드를 얻을 수 있습니다.
현재 사용 가능한 대시보드는 다음과 같습니다:
이러한 대시보드는 코드에서 발견된 함수 및 코드 조각에 대한 통계를 제공하여 분석 프로세스를 시작하는 데 도움을 줍니다.
Bughound에 대한 자세한 내용은 다음 문서를 확인하세요:
이 프로젝트는 GPL-3.0 라이선스 하에 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.