
Malcom은 네트워크 트래픽을 그래픽으로 표현하여 시스템의 네트워크 통신을 분석하고, 이를 알려진 악성코드 출처와 교차 참조하기 위한 도구입니다. 특정 악성코드 종류가 외부와 통신하려는 방식을 분석할 때 유용합니다.
Malcom은 다음 작업을 도와줄 수 있습니다:
Malcom의 목표는 주어진 호스트나 네트워크에서 발생하는 네트워크 트래픽을 사람이 읽을 수 있는 버전으로 제공하여 악성코드 분석과 인텔리전스 수집을 더 빠르게 만드는 것입니다. 네트워크 트래픽 정보를 실행 가능한 인텔리전스로 더 빠르게 변환하세요.
wiki에서 몇 가지 멋진 스크린샷과 자체 피드를 추가하는 방법에 대한 튜토리얼이 포함된 빠른 시작을 확인하세요.
도움이 필요하거나 기여하고 싶다면 메일링 리스트에 가입하거나 IRC(#malcom on freenode.net, 꽤 조용하지만 항상 누군가 있습니다)에서 사람을 찾아보세요. 트위터 @tomchop_로 연락하셔도 됩니다.
호스트 tomchop.me의 예제 그래프입니다.

데이터셋 보기 (IP만 표시하도록 필터링됨)

mongodb와 redis-server가 실행 중인지 확인./malcom.py -c malcom.conf (또는 ./malcom.py --help로 옵션 확인)
** 예제 구성 파일로 malcom.conf.example을 malcom.conf에 복사할 수 있습니다.
** 기본 포트는 8080입니다.
** 또는 celery에서 피드를 실행하세요. 자세한 내용은 피드 섹션을 참조하세요.Malcom은 Python으로 작성되었습니다. 필요한 라이브러리가 있다면 모든 플랫폼에서 실행할 수 있습니다. 시스템 라이브러리를 망가뜨리지 않도록 Python 가상 환경(virtualenv) 사용을 적극 권장합니다.
다음은 Ubuntu server 14.04 LTS에서 테스트되었습니다:
git, python, libevent 라이브러리, mongodb, redis 및 기타 종속성 설치
$ sudo apt-get install build-essential git python-dev libevent-dev mongodb libxml2-dev libxslt-dev zlib1g-dev redis-server libffi-dev libssl-dev python-virtualenv
Git 리포지토리 클론:
$ git clone https://github.com/tomchop/malcom.git malcom
가상 환경 생성 및 활성화:
$ cd malcom
$ virtualenv env-malcom
$ source env-malcom/bin/activate
scapy 다운로드 및 설치:
$ cd ..
$ wget http://www.secdev.org/projects/scapy/files/scapy-latest.tar.gz
$ tar xvzf scapy-latest.tar.gz
$ cd scapy-2.1.0
$ python setup.py install
가상 환경 내에서 requirements.txt 파일의 필요한 Python 패키지 설치:
$ cd ../malcom
$ pip install -r requirements.txt
IP 지리적 위치 기능을 사용하려면 Maxmind 데이터베이스를 다운로드하여 malcom/Malcom/auxiliary/geoIP 디렉토리에 압축을 풀어야 합니다. 다음 링크에서 Maxmind의 무료(따라서 정확도가 다소 낮을 수 있음) 데이터베이스를 받을 수 있습니다: http://dev.maxmind.com/geoip/geoip2/geolite2/:
$ cd Malcom/auxiliary/geoIP
$ wget http://geolite.maxmind.com/download/geoip/database/Geolite2-City.mmdb.gz
$ gunzip -d GeoLite2-City.mmdb.gz
$ mv Geolite2-City.mmdb GeoIP2-City.mmdb
malcom 디렉토리에서 ./malcom.py로 웹 서버를 실행합니다. 수신 인터페이스와 포트는 ./malcom.py --help를 확인하세요.
malcom.conf.example 파일을 malcom.conf에 복사하고 ./malcom.py -c malcom.conf를 실행할 수 있습니다.기본적으로 Malcom은 로컬 mongodb 인스턴스에 연결하여 malcom이라는 자체 데이터베이스를 생성합니다. 이 설정이 적합하다면 다음 단계를 건너뛸 수 있습니다. 그렇지 않으면 malcom.conf 파일의 database 섹션을 편집해야 합니다.
기본적으로 Malcom은 malcom이라는 데이터베이스를 사용합니다. malcom.conf 파일을 편집하여 database 섹션의 name 지시문을 원하는 대로 설정하면 이 동작을 변경할 수 있습니다.
[database]
...
name = my_malcom_database
...
기본적으로 Malcom은 localhost에 연결을 시도하지만 데이터베이스가 다른 서버에 있을 수 있습니다. 이를 변경하려면 hosts 지시문을 설정하면 됩니다. 호스트 이름이나 IPv4/v6 주소를 사용할 수 있습니다(IPv6 주소는 [와 ]로 감싸야 합니다, 예: [::1]).
호스트 my.mongo.server에 독립형 데이터베이스를 사용하려면 다음과 같이 설정하세요:
[database]
...
hosts = my.mongo.server
...
mongod가 수신 대기 중인 포트도 서버 이름/주소 뒤에 :로 구분하여 지정할 수 있습니다:
[database]
...
hosts = localhost:27008
...
그리고 ReplicaSet을 사용하여 my.mongo1.server와 my.mongo2.server를 그룹화하는 경우:
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
mongod 인스턴스가 인증된 연결을 강제하도록 설정했을 수 있습니다. 이 경우 드라이버가 mongod 인스턴스에 연결하는 데 사용할 사용자 이름을 설정해야 합니다. 이렇게 하려면 malcom.conf 파일의 database 섹션에 username 지시문을 추가하세요. 또한 password 지시문으로 비밀번호를 설정해야 할 수도 있습니다. 사용자에게 비밀번호가 없으면 password 지시문을 무시(즉, 주석 처리)하세요.
[database]
...
username = my_user
password = change_me
...
사용자가 malcom 데이터베이스가 아닌 다른 데이터베이스(예: 관리 사용자의 admin 데이터베이스)에 연결된 경우 authentication_database 지시문에 해당 데이터베이스 이름을 설정해야 합니다.
[database]
...
authentication_database = some_other_database
...
복제 세트를 사용할 때 올바른 세트에 연결되었는지 확인해야 할 수 있습니다. 이를 위해 replset 지시문을 추가하여 mongo 드라이버가 복제 세트 이름을 확인하도록 강제합니다.
[database]
...
replset = my_mongo_replica
...
기본적으로 Malcom은 복제 세트의 기본 노드에 연결을 시도합니다. 이를 변경해야 할 수도 있습니다. 이 동작을 변경하려면 read_preference 지시문을 설정하세요. 자세한 내용은 mongo 문서를 참조하세요.
[database]
...
read_preference = NEAREST
...
지원되는 읽기 기본 설정은 다음과 같습니다:
가장 빠른 시작 방법은 공개 Docker 저장소에서 Docker 이미지를 가져오는 것입니다. 더 오래되고 안정적인 Docker 빌드를 가져오려면 tomchop/malcom-automatic 대신 tomchop/malcom을 사용하세요.
$ sudo docker pull tomchop/malcom-automatic
$ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
http://<docker_host>:8080/에 접속하면 시작할 수 있습니다.
Malcom은 이제 TLS 차단을 지원합니다. 이를 작동시키려면 Malcom/networking/tlsproxy/keys 디렉토리에 몇 가지 키를 생성해야 합니다. 방법에 대한 자세한 내용은 해당 디렉토리의 KEYS.md 파일을 참조하세요.
또한 IPtables(이미 설치되어 있어야 함)와 포트 포워딩 권한(일반적으로 root 권한 필요)이 있는지 확인하세요. 편리한 forward_port.sh 스크립트를 사용하여 이 작업을 수행할 수 있습니다. 예를 들어, 포트 443으로 향하는 모든 TLS 통신을 차단하려면 forward_port.sh 443 9999를 사용하세요. 그런 다음 Malcom에게 포트 9999에서 차단 프록시를 실행하도록 지시해야 합니다.
이 프로세스는 향후 릴리스에서 자동화될 예정입니다.
Malcom은 Ubuntu Server 14.04 LTS VM에서 설계 및 테스트되었습니다.
악성코드 분석에 익숙하다면 이미 호스트 OS에 수많은 가상 머신이 있을 것입니다. 새 VM에 Malcom을 설치하고 다른 VM의 연결을 Malcom을 통해 라우팅하세요. enable_routing.sh를 사용하여 Malcom이 실행 중인 VM에서 라우팅/NAT를 활성화하세요. 게스트 OS에 추가 네트워크 카드를 추가해야 합니다.
Malcom은 계층 3 네트워크 데이터를 수신하는 한 어디에나 배포할 수 있습니다. 고가용성 네트워크에서는 사용을 권장하지 않지만(빠르게 설계되지 않았습니다. 면책 조항 참조), 스위치의 미러 포트 끝이나 게이트웨이에서 실행할 수 있습니다.
피드에서만 정보를 가져오는 Malcom 인스턴스를 실행하려면 --feeds 옵션을 사용하거나 구성 파일을 조정하세요.
데이터베이스가 자동으로 채워져야 합니다. 코드를 살펴볼 수 있다면 피드를 추가하는 것은 매우 간단합니다(Evil 객체를 생성한다고 가정). /feeds/zeustracker에서 예제 피드를 찾을 수 있습니다. 더 자세한 튜토리얼은 여기에서 확인할 수 있습니다.
celery를 사용하여 피드를 실행할 수도 있습니다. 가상 환경에서 $ pip install celery를 실행하여 celery가 설치되었는지 확인하세요. 그런 다음 celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12를 사용하여 12개의 동시 워커로 피드 프로세스를 실행할 수 있습니다.
Malcom은 대부분 Python으로 처음부터 작성되었습니다. 다음 프레임워크를 사용합니다: