
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 패키지 설치:
기본적으로 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으로 처음부터 작성되었습니다. 다음 프레임워크를 사용합니다:
협업 - 이 도구의 주요 방향은 협업 기능을 갖추는 것입니다. 몇 가지 아이디어가 있으며, 데이터 공유가 구현되면 100배 더 유용해질 것이라고 생각합니다.
확장성 - 도구에 포함시키고 싶은 또 다른 사항은 더 쉽게 확장할 수 있는 기능입니다. 모든 사람이 동일한 요구 사항을 가지고 있지는 않으며, 이 도구는 제 요구 사항을 염두에 두고 설계되었습니다. 이제 새 피드를 추가하여 Malcom을 사용자 정의할 수 있습니다.
협업과 확장이 완료되면, 더 많은 사고 대응 담당자에게 유용할 것이라고 생각합니다. :-)
이 도구는 여가 시간에 작성되었습니다. 우리가 매일 다운로드하여 사용하는 수많은 도구와 마찬가지로, 데이터 안정성과 신뢰성이 필수인 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.
초기 개발 단계에 있으며, "저에게는 작동한다"는 의미입니다. 자유롭게 공유하고, 개선하고, 풀 리퀘스트를 요청하세요.
Malcom - Malware communications analyzer Copyright (C) 2013 Thomas Chopitea
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Malcom에 포함된 Redis, MongoDB, d3js, Maxmind 및 Bootstrap(및 기타 타사 라이브러리)은 자체 GPL 호환 라이선스를 가질 수 있습니다.
$ 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를 실행할 수 있습니다.