Engineering
오픈소스 Moloch을 소개합니다.
2016년 10월 6일
원문에서 보기 ↗목차
- 들어가기 전에
- Moloch이란?
- Moloch 활용
- 결론
- 참고자료
들어가기 전에
요즘 많은 IT기업들이 고가의 상용 솔루션을 대체하기 위해 오픈소스를 적극적으로 활용합니다. 오픈소스로 사용할 경우 비용도 절감할 수 있지만, 사용자 인프라 환경에 맞게끔 선택 및 customizing하여 사용할 수 있다는 장점이 있습니다.
이번 meetup에서 소개 드리고자 하는 내용은 그러한 오픈소스 중에 하나인 Moloch입니다. 그럼 지금부터 Moloch의 소개 및 활용방법을 공유 드리겠습니다.
Moloch이란?
Moloch은 오픈소스 기반의 대규모 ipv4 캡쳐(pcap)도구입니다. 어원을 찾아보니 moloch은 히브리 신화서에 나오는 공포의 마신이라고 하는데요, Moloch의 심볼은 위의 부엉이(?)이며 트래픽을 보여달라고 하면 눈동자를 막 굴리기도 한답니다. :D
Scalability
Moloch 자체가 IDS를 대체하는 것은 아니지만, 그러한 솔루션들과 함께 빠른 엑세스를 제공하며, 표준 PCAP 포맷으로 모든 네트워크 트레픽을 저장하고 인덱싱합니다. 많은 다른 시스템들과 같이 쉽게 구축이 가능하며, SW성능으로 10G 이상 규모의 트래픽도 핸들링 가능합니다. PCAP 저장은 센서의 디스크에 저장이 되며 메타데이터 정보는 Elasticsearch를 연동하여 사용할 수 있습니다.
Interface
PCAP을 보고 검색하고 데이터를 추출하기 위한 쉬운 웹 인터페이스를 제공합니다. 모든 패킷이 PCAP으로 저장되고 추출되기 때문에 원하는 세션을 찾은 뒤에 Wireshark와 같은 다른 툴을 쉽게 사용할 수 있습니다.
API
PCAP데이터와 JSON 포맷의 세션데이터를 다운받을 수 있도록 API를 제공하고 있습니다.
Security
Front단에서 아파치를 이용하여 간단한 HTTP, HTTPS 패스워드 인증이 가능합니다. 센서로부터 저장된 모든 PCACP은 API나 Moloch 인터페이스를 통해서만 접근 가능합니다.
Session Tab

SPI View Tab

Moloch 활용
Moloch 구축이 완료되면 이제 어떻게 활용을 할지 고민하게 될 것입니다. 수집되는 방대한 양의 데이터를 활용하기 위한 기본적인 내용을 정리해 보았습니다.
우선 기본적인 연산자 입력은 아래와 같습니다.
연산기호
| 연산기호 | 설명 | 사용 예 |
|---|---|---|
| < | 보다 작다 | packets이 1000미만 pachekts < 1000 |
| <= | 같거나 작다 | packets이 1000이하 pachekts <= 1000 |
| > | 보다 크다 | packets이 1000초과 pachekts > 1000 |
| >= | 같거나 크다 | packets이 1000이상 pachekts >= 1000 |
| == | 같다 | 출발지IP가 192.168.1.1인 경우 ip.src == 192.168.1.1 |
| != | 같지 않다 | 출발지IP가 192.168.0.1이 아닌 경우 ip.src != 192.168.0.1 |
| && | AND | 출발지IP가 192.168.1.1이고 목적지 Port가 80인 경우 ip.src == 10.77.159.128 && port.dst == 80 |
| II | OR | 출발지IP가 192.168.1.1이거나 10.1.1.1인 경우 ip.src == 192.168.1.1 II ip.src == 10.1.1.1 |
주요 검색 조건
| 조건명 | 조건 | 사용 예 |
|---|---|---|
| 시작시간 종료시간 | start stop | [시간조건 Custom 선택] Beginning Time 입력 폼 Ending Time 입력 폼 |
| IP(양방향) 출발지 IP 목적지 IP | ip ip.src ip.dst | ip == 192.168.1.1 ip.src == 192.168.1.1 ip.dst == 192.168.1.1 |
| Port(양방향) 출발지 Port 목적지 Port | port port.src port.dst | port == 80 port.src == 80 ip.src == 80 |
| packets 수 (MAX 10,000) | packets | packets > 1000 |
| 출발지IP 국가 목적지IP 국가 | country.src country.dst | country.src == KOR country.dst == USA |
| Protocol 종류 | protocols | protocols == tcp |
| 도메인 | host | host == nhnent.com |
실무 활용하기
위에서 알려드렸던 기본 검색방법을 이용해서 다양한 검색을 할 수 있습니다. 이제 실무에서 사용할 수 있는 몇 가지 상황을 만들어 사용방법을 자세히 알아보도록 하겠습니다.
□ 상황1. 내부에서 외부로 원격접속을 하는 사용자 확인
- Windows OS 원격접속을 시도하는 사용자 검색 검색 : port.dst == 3389 && protocols == rdp 설명 : Windows OS의 기본 원격 접속 포트 3389와 원격 프로토콜인 rdp를 AND 검색. 만약 원격포트를 변경해서 사용하는 경우 rdp 프로토콜로만 검색을 해서 필터검색.
□ 상황2. 내부에서 해외IP로 FTP를 이용한 자료 유출 확인
-
해외 FTP 로 접속사용자 확인 검색 : protocols == ftp && country.dst != KOR 설명 : FTP프로토콜 사용자 중 국내(KOR)가 아닌 목적지 국가로 접속하는 대상 검색
-
해외 FTP 사용자의 전송 데이터 추이 확인 검색 : ip.src == 10.1.1.3 && protocols == ftp && country.dst != KOR && bytes > 100000 설명 : 1)번 검색에서 대상IP와 약 100KB 이상일 경우에 대해 AND 검색
□ 상황3. Torrent를 사용하고 있는 내부Host 확인
- torrent 사용자 검색 검색 : protocols == bittorrent 설명 : torrent 사용시 bittorrent 프로토콜을 이용하면 검색 가능
2) torrent 이용 추이 확인 설명 : 검색 후 그래프를 통해 전체 Host의 사용현황을 대략적으로 파악할 수 있으며, 우측 세계지도 위에 마우스를 올려놓으시면 접속국가 분포현황도 함께 확인할 수 있습니다.

□ 상황4. User-Agent 정보를 이용한 비인가 보안도구 사용 확인
- 스캐닝 도구인 Acunetix와 pangolin을 사용한 내부사용자 검색 검색 : http.user-agent == Acunetix || http.user-agent == pangolin 설명 : User-Agent에 Tool 정보가 있을 때 http.user-agent 검색을 통해 사용자 확인 가능
□ 상황5. 악성코드에 감염된 내부사용자PC의 감염경로 및 확산내역 확인
- 감염의심시간 설정 후 감염PC IP(10.1.1.2) 가 접속한 도메인 정보 조회 검색 : ip.src == 10.1.1.2 && http.uri == * 설명 : 감염PC IP를 지정하고 해당시간에 접속했던 웹 URI정보를 확인

- 의심되는 도메인에 접속한 사용자 확인 검색 : http.uri == malware_site.com && ip.dst != 10.0.0.0/8 설명 : 의심되는 도메인에 접속한 사용자 중 목적지가 내부IP인 경우는 제외 http.uri 대신 host로 검색해도 결과는 나오지만 http외 DNS정보도 같이 나올 수 있어 http.uri를 사용
결과를 한눈에 시각적으로 보기 위해서는 Connections 메뉴를 클릭하면 아래 예제화면과 같이 전체적인 현황을 볼 수 있습니다. 
- 패킷 분석 검색된 결과의 패킷 내용을 분석하고 싶으시면 좌측에 있는 + 버튼을 클릭하여 request, response 정보를 확인 할 수 있습니다. 그리고 해당 패킷의 pcap파일로 저장하여 wireshark에서 분석을 하고 싶으시면 좌측 상단에 있는 Download Pcap 버튼을 누르시면 가능합니다.

결론
지금까지 moloch의 소개와 활용방법에 대해 알아보았습니다. moloch은 용도 특성상 트래픽 양의 변화에 따라 운영이슈가 발생할 수 있으므로 초기 구축 시 이러한 부분도 고려하여 설계하는 것이 좋습니다.만약 트래픽 양이 증가할 경우 장비 증설을 통한 scale out도 가능합니다. 위에서 설명한 활용내용 외에도 많은 메타데이터 정보를 이용하여 다양한 검색이 가능하기 때문에 상황에 맞는 검색을 잘 활용하신다면 업무에 많은 도움이 될 것으로 생각됩니다.
참고 자료
- Moloch 프로젝트 : https://github.com/aol/moloch
- Moloch 웹페이지 : http://molo.ch/