Maltrail 은 악성 및/또는 일반적으로 의심스러운 추적이 포함된 공개적으로 사용 가능한 (블랙) 목록과 다양한 AV 보고서 및 사용자 정의 사용자 정의 목록에서 컴파일된 정적 추적을 활용하는 악성 트래픽 탐지 시스템입니다. 여기서 추적은 도메인 이름(예: zvpprsensinaix.com
에서 무엇이든 될 수 있습니다. Banjori 악성코드의 경우 zvpprsensinaix.com
), URL(예: 알려진 악성 실행 파일의 경우 hXXp://109.162.38.120/harsh02.exe
), IP 주소(예: 알려진 공격자의 경우 185.130.5.231
) 또는 HTTP User-Agent 헤더 값(예: 자동 SQL 주입 및 데이터베이스 인수 도구의 경우 sqlmap
). 또한 알려지지 않은 위협(예: 새로운 악성 코드)을 발견하는 데 도움이 될 수 있는 (선택 사항) 고급 경험적 메커니즘을 사용합니다.
다음 (블랙)목록(예: 피드)이 활용되고 있습니다.
360bigviktor, 360chinad, 360conficker, 360cryptolocker, 360gameover,
360locky, 360necurs, 360suppobox, 360tofsee, 360virut, abuseipdb, alienvault,
atmos, badips, bitcoinnodes, blackbook, blocklist, botscout,
bruteforceblocker, ciarmy, cobaltstrike, cruzit, cybercrimetracker,
dataplane, dshieldip, emergingthreatsbot, emergingthreatscip,
emergingthreatsdns, feodotrackerip, gpfcomics, greensnow, ipnoise,
kriskinteldns, kriskintelip, malc0de, malwaredomainlistdns, malwaredomains,
maxmind, minerchk, myip, openphish, palevotracker, policeman, pony,
proxylists, proxyrss, proxyspy, ransomwaretrackerdns, ransomwaretrackerip,
ransomwaretrackerurl, riproxies, rutgers, sblam, socksproxy, sslbl,
sslproxies, talosintelligence, torproject, trickbot, turris, urlhaus,
viriback, vxvault, zeustrackermonitor, zeustrackerurl, etc.
정적 항목의 경우 다음과 같은 악성 엔터티(예: 맬웨어 C&C 또는 싱크홀)에 대한 추적이 수동으로 포함되었습니다(다양한 AV 보고서 및 개인 연구를 통해).
1ms0rry, 404, 9002, aboc, absent, ab, acbackdoor, acridrain, activeagent,
adrozek, advisorbot, adwind, adylkuzz, adzok, afrodita, agaadex, agenttesla,
aldibot, alina, allakore, almalocker, almashreq, alpha, alureon, amadey,
amavaldo, amend_miner, ammyyrat, android_acecard, android_actionspy,
android_adrd, android_ahmythrat, android_alienspy, android_andichap,
android_androrat, android_anubis, android_arspam, android_asacub,
android_backflash, android_bankbot, android_bankun, android_basbanke,
android_basebridge, android_besyria, android_blackrock, android_boxer,
android_buhsam, android_busygasper, android_calibar, android_callerspy,
android_camscanner, android_cerberus, android_chuli, android_circle,
android_claco, android_clickfraud, android_cometbot, android_cookiethief,
android_coolreaper, android_copycat, android_counterclank, android_cyberwurx,
android_darkshades, android_dendoroid, android_dougalek, android_droidjack,
android_droidkungfu, android_enesoluty, android_eventbot, android_ewalls,
android_ewind, android_exodus, android_exprespam, android_fakeapp,
android_fakebanco, android_fakedown, android_fakeinst, android_fakelog,
android_fakemart, android_fakemrat, android_fakeneflic, android_fakesecsuit,
android_fanta, android_feabme, android_flexispy, android_fobus,
android_fraudbot, android_friend, android_frogonal, android_funkybot,
android_gabas, android_geinimi, android_generic, android_geost,
android_ghostpush, android_ginmaster, android_ginp, android_gmaster,
android_gnews, android_godwon, android_golddream, android_goldencup,
android_golfspy, android_gonesixty, android_goontact, android_gplayed,
android_gustuff, android_gypte, android_henbox, android_hiddad,
android_hydra, android_ibanking, android_joker, android_jsmshider,
android_kbuster, android_kemoge, android_ligarat, android_lockdroid,
android_lotoor, android_lovetrap, android_malbus, android_mandrake,
android_maxit, android_mobok, android_mobstspy, android_monokle,
android_notcompatible, android_oneclickfraud, android_opfake,
android_ozotshielder, android_parcel, android_phonespy, android_pikspam,
android_pjapps, android_qdplugin, android_raddex, android_ransomware,
android_redalert, android_regon, android_remotecode, android_repane,
android_riltok, android_roamingmantis, android_roidsec, android_rotexy,
android_samsapo, android_sandrorat, android_selfmite, android_shadowvoice,
android_shopper, android_simbad, android_simplocker, android_skullkey,
android_sndapps, android_spynote, android_spytekcell, android_stels,
android_svpeng, android_swanalitics, android_teelog, android_telerat,
android_tetus, android_thiefbot, android_tonclank, android_torec,
android_triada, android_uracto, android_usbcleaver, android_viceleaker,
android_vmvol, android_walkinwat, android_windseeker, android_wirex,
android_wolfrat, android_xavirad, android_xbot007, android_xerxes,
android_xhelper, android_xploitspy, android_z3core, android_zertsecurity,
android_ztorg, andromeda, antefrigus, antibot, anubis, anuna, apocalypse,
apt_12, apt_17, apt_18, apt_23, apt_27, apt_30, apt_33, apt_37, apt_38,
apt_aridviper, apt_babar, apt_bahamut, etc.
Maltrail은 트래픽 -> 센서 <-> 서버 <-> 클라이언트 아키텍처를 기반으로 합니다. 센서 는 모니터링 노드(예: SPAN/미러링 포트에 수동적으로 연결된 Linux 플랫폼 또는 Linux 브리지에서 투명하게 인라인으로 연결된 Linux 플랫폼) 또는 통과하는 트래픽을 "모니터링"하는 독립형 시스템(예: 허니팟)에서 실행되는 독립형 구성 요소입니다. 블랙리스트 항목/트레일(예: 도메인 이름, URL 및/또는 IP) 일치하는 경우 이벤트 세부 정보를 적절한 로깅 디렉터리(예: 구성 섹션에 설명된 LOG_DIR
) 내에 저장되는 (중앙) 서버 로 보냅니다. 센서가 서버 와 동일한 시스템(기본 구성)에서 실행되는 경우 로그는 로컬 로깅 디렉터리에 직접 저장됩니다. 그렇지 않으면 UDP 메시지를 통해 원격 서버(예: 구성 섹션에 설명된 LOG_SERVER
)로 전송됩니다.
서버 의 주요 역할은 이벤트 세부 정보를 저장하고 보고 웹 애플리케이션에 대한 백엔드 지원을 제공하는 것입니다. 기본 구성에서는 서버와 센서가 동일한 시스템에서 실행됩니다. 따라서 센서 활동의 잠재적 중단을 방지하기 위해 프런트엔드 보고 부분은 "Fat 클라이언트" 아키텍처를 기반으로 합니다(즉, 모든 데이터 사후 처리가 클라이언트의 웹 브라우저 인스턴스 내에서 수행됩니다). 선택한(24시간) 기간 동안의 이벤트(예: 로그 항목)는 클라이언트 로 전송되며 보고 웹 애플리케이션은 프레젠테이션 부분을 전적으로 담당합니다. 데이터는 압축된 청크로 클라이언트에 전송되며 순차적으로 처리됩니다. 최종 보고서는 고도로 압축된 형식으로 생성되므로 사실상 무제한의 이벤트를 표시할 수 있습니다.
참고: 서버 구성 요소를 모두 건너뛰고 독립형 센서 만 사용할 수 있습니다. 이러한 경우 모든 이벤트는 로컬 로깅 디렉터리에 저장되며, 로그 항목은 수동으로 또는 일부 CSV 읽기 응용 프로그램을 통해 검사할 수 있습니다.
수집된 실제 위협이 포함된 모든 기능을 갖춘 데모 페이지를 여기에서 찾을 수 있습니다.
Maltrail을 제대로 실행하려면 *nix/BSD 시스템에 Python 2.6 , 2.7 또는 3.x 가 설치된 pcapy-ng 패키지와 함께 필요합니다.
참고: pcapy-ng
pcapy
를 사용하면 특히 Python 3.x 환경에서 Maltrail이 잘못 작동할 수 있습니다. 예.
센서 구성요소는 CAPTURE_BUFFER
옵션에 사용된 값에 따라 단일 프로세스 모드에서 실행하려면 최소 1GB의 RAM이 필요하고 다중 처리 모드에서 실행되는 경우에는 그 이상이 필요합니다. 또한 센서 구성 요소(일반적인 경우)에는 관리/루트 권한이 필요합니다.
서버 구성 요소에는 특별한 요구 사항이 없습니다.
다음 명령 세트는 Maltrail 센서를 시작하고 실행해야 합니다(기본 설정 및 모니터링 인터페이스 "any"로 즉시 사용 가능).
sudo apt-get install git python3 python3-dev python3-pip python-is-python3 libpcap-dev build-essential procps schedtool
sudo pip3 install pcapy-ng
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
sudo python3 sensor.py
sudo zypper install gcc gcc-c++ git libpcap-devel python3-devel python3-pip procps schedtool
sudo pip3 install pcapy-ng
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
sudo python3 sensor.py
동일한 시스템에서 (선택 사항) 서버를 시작하려면 새 터미널을 열고 다음을 실행하십시오.
[[ -d maltrail ]] || git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
python server.py
모든 것이 제대로 작동하는지 테스트하려면 다음을 실행하세요.
ping -c 1 136.161.101.53
cat /var/log/maltrail/ $( date + " %Y-%m-%d " ) .log
또한 DNS 트래픽 캡처를 테스트하려면 다음을 시도해 볼 수 있습니다.
nslookup morphed.ru
cat /var/log/maltrail/ $( date + " %Y-%m-%d " ) .log
센서 및 서버 인스턴스를 중지하려면(백그라운드에서 실행 중인 경우) 다음을 실행하십시오.
sudo pkill -f sensor.py
pkill -f server.py
웹 브라우저에서 http://127.0.0.1:8338(기본 자격 증명: admin:changeme!
)을 방문하여 보고 인터페이스(예: Client )에 액세스합니다.
센서 구성은 maltrail.conf
파일의 [Sensor]
섹션에서 찾을 수 있습니다.
USE_MULTIPROCESSING
옵션이 true
로 설정되면 모든 CPU 코어가 사용됩니다. 하나의 코어는 패킷 캡처(적절한 선호도, IO 우선 순위 및 적절한 수준 설정 포함)에만 사용되고 다른 코어는 패킷 처리에 사용됩니다. 그렇지 않으면 모든 것이 단일 코어에서 실행됩니다. USE_FEED_UPDATES
옵션을 사용하면 피드에서 트레일 업데이트를 완전히 끌 수 있습니다(제공된 정적 업데이트만 사용). 옵션 UPDATE_PERIOD
에는 trails
디렉터리 내의 정의를 사용하여 각 자동 트레일 업데이트(참고: 기본값은 86400
(예: 1일)로 설정됨) 사이의 시간(초)이 포함됩니다(참고: 센서 와 서버 모두 트레일 업데이트를 처리함). 사용자는 CUSTOM_TRAILS_DIR
옵션을 사용하여 사용자 정의 트레일( *.txt
) 파일이 포함된 디렉터리의 위치를 제공할 수 있습니다.
USE_HEURISTICS
옵션은 휴리스틱 메커니즘(예: long domain name (suspicious)
, excessive no such domain name (suspicious)
, direct .exe download (suspicious)
등)을 활성화하여 잠재적으로 오탐지를 유발할 수 있습니다. CAPTURE_BUFFER
옵션은 비캡처 프로세스에 의한 추가 처리를 위해 링 버퍼에 패킷 캡처를 저장하기 위한 다중 처리 모드의 경우 사용할 총 메모리(총 실제 메모리의 백분율로 바이트 단위)를 제공합니다. MONITOR_INTERFACE
옵션에는 캡처 인터페이스의 이름이 포함되어야 합니다. 모든 인터페이스에서 캡처하려면 any
값을 사용하십시오(OS가 이를 지원하는 경우). 옵션 CAPTURE_FILTER
관심 없는 패킷을 건너뛰고 캡처 프로세스를 쉽게 하기 위한 네트워크 캡처( tcpdump
) 필터가 포함되어야 합니다. 옵션 SENSOR_NAME
에는 이벤트 sensor_name
값 내에 표시되어야 하는 이름이 포함되어 있으므로 한 센서의 이벤트를 다른 센서와 구별할 수 있습니다. LOG_SERVER
옵션이 설정된 경우 모든 이벤트는 원격으로 Server 로 전송됩니다. 그렇지 않으면 이벤트는 LOG_DIR
옵션으로 설정된 로깅 디렉터리에 직접 저장됩니다. 이 디렉터리는 maltrail.conf
파일의 [All]
섹션에서 찾을 수 있습니다. UPDATE_SERVER
옵션이 설정된 경우 모든 추적은 지정된 위치에서 가져오고, 그렇지 않으면 설치 자체 내부에 있는 추적 정의에서 업데이트됩니다.
SYSLOG_SERVER
및/또는 LOGSTASH_SERVER
옵션을 사용하여 센서 이벤트(예: 로그 데이터)를 Maltrail 이외의 서버로 보낼 수 있습니다. SYSLOG_SERVER
의 경우 이벤트 데이터는 CEF( Common Event Format ) 형식으로 지정된 주소(예: 192.168.2.107:514
)에서 수신 대기하는 UDP(예: Syslog) 서비스로 전송되고, LOGSTASH_SERVER
이벤트 데이터는 다음과 같이 전송됩니다. 지정된 주소(예: 192.168.2.107:5000
에서 수신 대기하는 UDP(예: Logstash) 서비스에 대한 JSON 형식 ).
UDP를 통해 전송되는 이벤트 데이터의 예는 다음과 같습니다.
SYSLOG_SERVER
옵션의 경우(참고: LogSeverity
값은 0(낮음), 1(중간) 및 2(높음)임): Dec 24 15:05:55 beast CEF:0|Maltrail|sensor|0.27.68|2020-12-24|andromeda (malware)|2|src=192.168.5.137 spt=60453 dst=8.8.8.8 dpt=53 trail=morphed.ru ref=(static)
LOGSTASH_SERVER
옵션의 경우: {"timestamp": 1608818692, "sensor": "beast", "severity": "high", "src_ip": "192.168.5.137", "src_port": 48949, "dst_ip": "8.8.8.8", "dst_port": 53, "proto": "UDP", "type": "DNS", "trail": "morphed.ru", "info": "andromeda (malware)", "reference": "(static)"}
센서(예: sudo python sensor.py
)를 처음으로 실행하거나 오랫동안 실행하지 않은 후에는 트레일 정의에서 트레일을 자동으로 업데이트합니다(참고: trails
디렉터리에 저장됨). 초기화 후에는 구성된 인터페이스( maltrail.conf
내부의 MONITOR_INTERFACE
옵션) 모니터링을 시작하고 구성된 로그 디렉터리( maltrail.conf
파일 섹션 [All]
내부의 LOG_DIR
옵션)에 이벤트를 쓰거나 원격으로 로깅/보고 서버 (옵션 LOG_SERVER
).
감지된 이벤트는 읽기 쉬운 CSV 형식(참고: 공백 ''이 구분 기호로 사용됨)으로 서버 의 로깅 디렉터리(예: maltrail.conf
파일 섹션 [All]
내 LOG_DIR
옵션)에 한 줄 항목으로 저장됩니다. 구성: time
sensor
src_ip
src_port
dst_ip
dst_port
proto
trail_type
trail
trail_info
reference
(예: "2015-10-19 15:48:41.152513" beast 192.168.5.33 32985 8.8.8.8 53 UDP DNS 0000mps.webpreview.dsl.net malicious siteinspector.comodo.com
):
서버 구성은 maltrail.conf
섹션 [Server]
내에서 찾을 수 있습니다.
옵션 HTTP_ADDRESS
에는 웹 서버의 수신 주소가 포함되어 있습니다(참고: 모든 인터페이스에서 수신하려면 0.0.0.0
사용하십시오). 옵션 HTTP_PORT
에는 웹 서버의 수신 포트가 포함되어 있습니다. 기본 수신 포트는 8338
로 설정됩니다. USE_SSL
옵션이 true
로 설정되면 웹 서버에 액세스하는 데 SSL/TLS
사용됩니다(예: https://192.168.6.10:8338/
). 이 경우 SSL_PEM
옵션은 서버의 개인/인증서 PEM 파일을 가리켜야 합니다.
하위 섹션 USERS
사용자의 구성 설정이 포함되어 있습니다. 각 사용자 항목은 username:sha256(password):UID:filter_netmask(s)
로 구성됩니다. 값 UID
고유한 사용자 식별자를 나타내며 관리 계정에는 1000보다 낮은 값을 사용하고 비관리 계정에는 더 높은 값을 사용하는 것이 좋습니다. filter_netmask(s)
부분은 사용자 계정에 따라 표시된 이벤트를 필터링하는 데 사용할 수 있는 쉼표로 구분된 하드 필터를 나타냅니다. 기본 항목은 다음과 같습니다.
UDP_ADDRESS
옵션에는 서버의 로그 수집 수신 주소가 포함되어 있으며(참고: 모든 인터페이스에서 수신하려면 0.0.0.0
사용하십시오), UDP_PORT
옵션에는 수신 포트 값이 포함되어 있습니다. 켜져 있는 경우 LOG_SERVER
옵션과 함께 사용하면 고유한(다중) 센서 <-> 서버 아키텍처에 사용할 수 있습니다.
옵션 FAIL2BAN_REGEX
에는 추출을 위한 /fail2ban
웹 호출에 사용되는 정규식(예: attacker|reputation|potential[^"]*(web scan|directory traversal|injection|remote code|iot-malware download|spammer|mass scanner
포함되어 있습니다. 오늘날의 공격자 소스 IP의 경우 이를 통해 주기적으로 IP 차단 메커니즘(예: fail2ban
, iptables
또는 ipset
)을 사용할 수 있습니다. 원격 위치에서 블랙리스트에 있는 IP 주소를 가져옵니다. 사용 예는 다음 스크립트입니다(예: 1분 단위로 root
cronjob으로 실행).
#! /bin/bash
ipset -q flush maltrail
ipset -q create maltrail hash:net
for ip in $( curl http://127.0.0.1:8338/fail2ban 2> /dev/null | grep -P ' ^[0-9.]+$ ' ) ; do ipset add maltrail $ip ; done
iptables -I INPUT -m set --match-set maltrail src -j DROP
옵션 BLACKLIST
사용하면 하나의 필드에 적용할 정규식을 작성할 수 있습니다. 각 규칙에 대한 구문은 다음과 같습니다. <field> <control> <regexp>
여기서:
field
비교할 필드를 나타내며 src_ip
, src_port
, dst_ip
, dst_port
, protocol
, type
, trail
또는 filter
일 수 있습니다.~
또는 일치하지 않는 경우 !~
를 control
할 수 있습니다.regexp
필드에 적용할 정규식입니다. and
키워드를 사용하여 다른 규칙을 연결합니다. or
키워드는 지원되지 않습니다. 이에 대한 줄을 추가하기만 하면 됩니다. BLACKLIST
키워드만 사용하거나 BLACKLIST_NAME
이라는 이름을 추가할 수 있습니다. 후자의 경우 URL은 /blacklist/name
입니다.
예를 들어, 다음은 192.168.0.0/16
이 아닌 다른 소스에서 대상 포트 SSH
로의 모든 트래픽에 대한 블랙리스트를 작성하거나 필터 scan
또는 known attacker
와 일치시킵니다.
BLACKLIST_OUT
src_ip !~ ^192.168. and dst_port ~ ^22$
src_ip !~ ^192.168. and filter ~ scan
src_ip !~ ^192.168. and filter ~ known attacker
BLACKLIST_IN
src_ip ~ ^192.168. and filter ~ malware
ipset 블랙리스트를 작성하는 방법은 우리 예에서 URL이 /blacklist/in
및 /blacklist/out
이라는 점을 제외하면 동일합니다(위 참조).
센서 와 동일하게 서버 (예: python server.py
)를 처음 실행할 때 및/또는 장기간 실행하지 않은 후 USE_SERVER_UPDATE_TRAILS
옵션이 true
로 설정된 경우 트레일 정의에서 트레일을 자동으로 업데이트합니다( 참고: trails
디렉터리에 저장됨). 기본 기능은 로그 항목을 로깅 디렉터리(즉, maltrail.conf
파일 섹션 [All]
내의 LOG_DIR
옵션)에 저장하고 최종 사용자에게 동일한 항목을 제공하기 위한 웹 보고 인터페이스를 제공하는 것입니다(참고: Apache와 같은 타사 웹 서버 패키지를 설치해야 함):
서버 의 보고 인터페이스에 들어갈 때(예: HTTP_ADDRESS
및 HTTP_PORT
옵션으로 정의된 주소를 통해) 사용자에게 다음 인증 대화 상자가 표시됩니다. 사용자는 구성 파일 maltrail.conf
내에서 서버 관리자가 설정한 적절한 자격 증명을 입력해야 합니다(참고: 기본 자격 증명은 admin:changeme!
입니다).
내부로 들어가면 사용자에게 다음 보고 인터페이스가 표시됩니다.
상단 부분에는 사용자가 과거 이벤트에 대한 로그를 선택할 수 있는 슬라이딩 타임라인(참고: 현재 날짜 레이블 및/또는 달력 아이콘을 클릭한 후 활성화됨)이 있습니다(참고: 이벤트에 마우스를 올리면 현재 이벤트의 대략적인 수와 함께 도구 설명 표시가 트리거됩니다) 날짜). 날짜는 월별로 그룹화되어 있으며 4개월 기간의 데이터가 위젯 자체에 표시됩니다. 그러나 제공된 슬라이더(예: )를 사용하면 사용자는 이전 달의 이벤트에 쉽게 액세스할 수 있습니다.
날짜를 클릭하면 해당 특정 날짜의 모든 이벤트가 로드되어 클라이언트의 웹 브라우저에 표시되어야 합니다. 이벤트 수와 네트워크 연결 속도에 따라 기록된 이벤트를 로드하고 표시하는 데 몇 초에서 최대 몇 분이 걸릴 수 있습니다(예: 100,000개의 이벤트는 총 5초 정도 소요됨). 전체 처리 시간 동안 비활성화된 사용자 인터페이스에 애니메이션 로더가 표시됩니다.
중간 부분에는 표시된 이벤트의 요약이 포함됩니다. Events
상자는 선택한 24시간 동안 발생한 총 이벤트 수를 나타냅니다. 여기서 빨간색 선은 IP 기반 이벤트, 파란색 선은 DNS 기반 이벤트, 노란색 선은 URL 기반 이벤트를 나타냅니다. Sources
상자는 누적 세로 막대형 차트 형식으로 상위 소스당 이벤트 수를 나타내며, 전체 소스 수가 맨 위에 표시됩니다. Threats
상자는 원형 차트 형태로 상위 위협의 비율을 나타냅니다(참고: 회색 영역에는 총 이벤트의 1% 미만인 모든 위협이 표시됨). 총 위협 수가 맨 위에 표시됩니다. Trails
상자는 원형 차트 형태로 상위 트레일의 비율을 나타내며(참고: 회색 영역에는 총 이벤트가 1% 미만인 모든 트레일이 포함됨), 총 트레일 수가 맨 위에 표시됩니다. 각 상자는 활성화되어 있으므로 그 중 하나를 클릭하면 더 자세한 그래프가 표시됩니다.
하단 부분에는 페이지가 매겨진 테이블 형식으로 기록된 이벤트가 요약되어 표시됩니다. 각 항목에는 단일 위협에 대한 세부 정보가 포함되어 있습니다(참고: 외부에서 들어오는 공격의 경우 src_ip
가 trail
과 동일한 경우 쌍 (src_ip, trail)
또는 (dst_ip, trail)
으로 고유하게 식별됨).
열 threat
에는 위협의 고유 ID(예: 85fdb08d
) 및 색상(참고: 위협 ID에서 돌출됨)이 포함되고, sensor
이벤트가 트리거된 센서 이름(예: blitvenica
)이 포함되며, events
현재 위협에 대한 총 이벤트 수가 포함됩니다. , severity
평가된 위협 심각도를 보유합니다(참고: info
및 reference
열의 값을 기준으로 계산, 악성 코드 생성 트래픽의 우선순위 지정), first_seen
선택한(24시간) 기간 동안 첫 번째 이벤트의 시간을 보유합니다(예: 06th 08:21:54
), last_seen
선택한(24시간) 기간(예: 06th 15:21:23
)의 마지막 이벤트 시간을 보유하고, sparkline
선택한 기간의 위협 활동을 나타내는 작은 스파크라인 그래프를 보유하고, src_ip
소스 IP를 보유합니다. ) 위협(예: 99.102.41.102
)의 src_port
는 소스 포트(예: 44556, 44589, 44601
), dst_ip
대상 IP(예: 213.202.100.28
)를 보유하고, dst_port
대상 포트(예: 80 (HTTP)
)를 보유하고, proto
프로토콜(예: TCP
)을 보유하고, trail
보유 이벤트를 유발한 블랙리스트(또는 경험적) 항목인 info
이벤트에 대한 추가 정보가 포함되어 있습니다. 위협/트레일(예: 알려진 공격자의 IP 주소에 대한 알려진 known attacker
또는 시작 중에 맬웨어가 일반적으로 사용하는 알려진 IP myip.ms
서비스에 대한 ipinfo
), reference
블랙리스트 항목의 소스(예: 정적 트레일에 대한 (static)
또는 동일한 소스에서 검색된 동적 피드) 및 tags
특정 트레일(예: APT28
)에 대한 사용자 정의 태그를 보유합니다.
src_ip
및 dst_ip
테이블 항목 위로 마우스를 이동하면 자세한 역방향 DNS 및 WHOIS 정보와 함께 정보 도구 설명이 표시됩니다(참고: RIPE는 정보 제공자입니다).
동일한 위협 항목 내에서 다른 이벤트 세부 정보(예: src_port
, dst_port
, proto
등)는 거품 아이콘(예: ) 형태로 압축됩니다. 이는 가능한 적은 행으로 사용 가능한 보고 인터페이스를 얻기 위해 수행됩니다. 해당 아이콘 위로 마우스를 이동하면 모든 항목이 포함된 정보 도구 설명이 표시됩니다(예: attacker
가 모든 포트 번호를 검사하고 있음).
해당 아이콘 중 하나를 클릭하면 추가 분석을 위해 복사-붙여넣기(d)할 수 있는 저장된 모든 항목(참고: 압축되지 않은 형식)이 포함된 새 대화 상자가 열립니다.
몇 초 동안 위협의 흔적 위에 마우스 포인터를 올려 놓으면 추적을 검색어로 사용하는 결과로 구성된 프레임이 생성됩니다. 검색 암호화 searX 검색 엔진. 많은 경우 이는 위협 자체에 대한 기본 정보를 제공하므로 사용자가 수동으로 검색할 필요가 없습니다. 열린 프레임 창의 오른쪽 상단에는 두 개의 추가 버튼이 있습니다. 첫 번째 항목(예: )을 클릭하면 결과 프레임이 새 브라우저의 탭(또는 창) 내에서 열리고, 두 번째 항목(예: )을 클릭하면 프레임이 즉시 닫힙니다. (참고: 프레임 테두리 밖의 마우스 포인터):
각 위협에는 동일한 추적을 공유하는 모든 위협을 자세히 설명하기 위해 임의의 "태그"로 채울 수 있는 열 tag
있습니다. 또한 이는 위협을 개별적으로 설명하는 좋은 방법이므로 동일한 태그(예: yahoo
)를 공유하는 모든 위협을 나중에 그룹화할 수 있습니다.
다음 섹션에서는 실제 사례를 통해 "일반적인 용의자" 시나리오 중 일부를 설명합니다.
대량 스캔은 개인 및/또는 조직이 매일 전체 0.0.0.0/0 IP 범위(예: 전체 인터넷)를 스캔할 수 있는 권리를 스스로 부여하는 매우 일반적인 현상입니다. 그런 다음 향후 스캔에서 건너뛰려면 개인적으로 연락해야 합니다.
설상가상으로 Shodan 및 ZoomEye와 같은 조직은 검색 엔진을 통해 (다른 잠재적 공격자에게) 모든 결과를 무료로 제공합니다. 다음 스크린샷에서는 하루 동안의 Shodan 스캔 세부 정보를 볼 수 있습니다.
다음은 "공격자" 주소에 대한 역방향 DNS 및 WHOIS 조회입니다.
trail
열의 콘텐츠(IP 주소) 위에 마우스 포인터를 올리면 "공격자"에 대한 추가 정보를 찾을 수 있는 searX의 검색 결과가 표시됩니다.
dst_ip
열에는 대규모 조직이 있는 경우 스캔된 IP 주소의 큰 목록이 표시됩니다.
dst_port
열에서는 이러한 대량 스캔으로 스캔된 모든 포트를 볼 수 있습니다.
다른 유사한 상황에서는 블랙리스트에 등록된 개별 공격자(이 경우 cinsscore.com)로부터 동일한 동작을 볼 수 있습니다.
또 다른 일반적인 동작은 하나의 특정 포트(예: Heartbleed가 발견된 경우 TCP 포트 443)를 검색하기 위해 전체 0.0.0.0/0 IP 범위(예: 인터넷)를 검색하는 것입니다. 다음 스크린샷에서는 잘못 구성된 VoIP 장치를 검색하기 위해 UDP 포트 5060(예: SIP)을 표적으로 삼아 이전에 블랙리스트에 오른 공격자(이 경우에는 Alienvault.com 및 다른 두 블랙리스트에 의해)에 대한 사례를 찾을 수 있습니다.
Tor 익명성 네트워크 뒤에 숨어 있는 잠재적인 공격자를 찾아내기 위해 Maltrail은 공개적으로 사용 가능한 Tor 종료 노드 목록을 활용합니다. 다음 스크린샷에서는 잠재적인 공격자가 Tor 네트워크를 활용하여 우리 조직 범위 내 웹 대상(HTTP를 통해)에 의심스러운 방식으로 액세스하는 사례를 볼 수 있습니다(10분 동안 총 171개의 연결 요청).
이전 사례와 매우 유사한 경우는 이전에 블랙리스트에 등록된 공격자가 다소 의심스러운 방식으로 조직 범위의 특정(예: HTTP가 아닌) 서비스에 액세스하려고 시도하는 경우입니다(예: 15분 이내에 총 1513번의 연결 시도).
Filter
필드에 ssh attacker
입력하면 해당 날짜에 발생한 유사한 사건을 모두 볼 수 있지만 이 경우에는 포트 22(예: SSH)에 대한 것입니다.
조직 내부의 감염된 컴퓨터에서 이미 알려진 C&C 서버로 연결을 시도하는 경우 다음과 유사한 위협을 찾을 수 있습니다(이 경우 Beebone).
알려진 DGA 도메인 이름이 포함된 DNS 요청의 경우 위협은 다음과 같이 표시됩니다(이 경우 Necurs).
다음의 경우 블랙리스트에 있는(이 경우에는 Malwarepatrol.net에 의해) URL에서 파일 다운로드가 발생했습니다.
Filter
필드에 특정 맬웨어 이름(이 경우 Ramnit)을 입력하면 이 맬웨어에 연결된 것으로 알려진 위협만 필터링됩니다(영향을 받는 모든 내부 컴퓨터 표시).
보다 일반적으로, Filter
필드에 malware
입력하면 맬웨어 관련 추적(예: IP
주소)에서 발견된 모든 위협이 다음에서 필터링됩니다.
Maltrail은 의심스러운 활동에 일반적으로 관여하는 것으로 알려진 TLD 도메인의 정적 목록을 사용합니다. 이러한 TLD 도메인은 대부분 무료 도메인 등록 기관(예: Freenom)에서 제공되므로 더욱 철저한 조사를 받아야 합니다. 다음 스크린샷에서는 알 수 없는 악성 코드가 DGA 알고리즘을 사용하여 C&C 서버에 연결하는 TLD 도메인 .cm
중 하나를 사용한 사례를 확인할 수 있습니다.
완벽하게 유효한 TLD 도메인(예: .ru
)이 의심스러운 활동에 사용되는 경우도 있습니다. 이 경우(예: long domain name (suspicious)
) 도메인은 분명히 알 수 없는 악성 코드에 의해 생성된 DGA입니다.
Maltrail은 의심스러운 활동(예: 대상의 IP 주소를 자주 변경하는 악성 코드 C&C 서버)에 자주 사용되는 소위 "동적 도메인"의 정적 목록을 사용합니다.
또한 Maltrail은 의심스러운 활동(예: Tor2Web 서비스를 사용하여 C&C 서버에 접속하는 악성 코드)에도 자주 사용되는 "양파" 관련 도메인의 정적 목록을 사용합니다.
조직의 감염된 내부 컴퓨터에서 탐지되지 않은 오래된 및/또는 더 이상 사용되지 않는 맬웨어의 경우 맬웨어가 DNS 확인 없이 오랫동안 죽은 C&C 서버의 도메인에 지속적으로 연결을 시도하는 "현상"이 종종 있습니다. 따라서 이러한 종류의 (잠재적) 위협은 excessive no such domain (suspicious)
으로 표시됩니다.
하나의 추적이 너무 많은 위협을 일으키는 경우(예: DNS 증폭 공격과 같은 가짜 소스 IP의 경우) 모든 유사한 위협은 단일 flood
위협으로 그룹화됩니다(참고: 위협의 ID는 접미사 F0
으로 표시됨). 다음 예와 같이:
많은 악성 코드는 일종의 ipinfo
서비스(예: ipinfo.io)를 사용하여 피해자의 인터넷 IP 주소를 알아냅니다. 정규 업무 시간, 특히 업무 외 시간의 경우 다음 예와 같이 이러한 종류의 요청을 면밀히 모니터링해야 합니다.
필터 ipinfo
사용하면 조직 범위 내에서 의심스러운 행동을 공유하는 잠재적으로 감염될 수 있는 모든 컴퓨터를 나열할 수 있습니다.
Maltrail은 의심스러운 모든 직접 파일 다운로드 시도(예: .apk
, .bin
, .class
, .chm
, .dll
, .egg
, .exe
, .hta
, .hwp
, .lnk
, .ps1
, .scr
, .sct
, .wbk
및 .xpi
파일 확장자). 이로 인해 많은 오탐이 발생할 수 있지만 결국 감염 체인을 재구성하는 데 도움이 될 수 있습니다(참고: Google과 같은 합법적인 서비스 제공업체는 일반적으로 암호화된 HTTPS를 사용하여 이러한 종류의 다운로드를 수행합니다).
외부 웹 애플리케이션 보안 스캐너(예: SQLi, XSS, LFI 등의 취약점 검색)에서 들어오는 의심스러운 요청 및/또는 알 수 없는 웹 사이트에 대한 내부 사용자의 악의적인 시도가 있는 경우 다음과 같은 위협이 발견될 수 있습니다. CMS CVE-2015-7297, CVE-2015-7857 및 CVE-2015-7858 취약점을 악용하려는 공격자:
다음 예에서는 웹 애플리케이션 취약점 검사가 "의심"으로 표시되었습니다.
자세한 내용을 보려면 거품 아이콘(예: )을 클릭하고 전체 내용을 텍스트 파일에 복사하여 붙여넣으면 의심스러운 HTTP 요청을 모두 볼 수 있습니다.
다음 스크린샷에서는 인기 있는 SQLi 취약점 도구 sqlmap의 실행을 로그 내에서 찾을 수 있습니다.
상당한 양의 서로 다른 TCP 포트에 대한 연결 시도가 너무 많은 경우 Maltrail은 휴리스틱 메커니즘 감지의 결과로 잠재적인 포트 검색에 대해 경고합니다. 다음 스크린샷에서는 널리 사용되는 포트 스캐닝 도구 nmap 실행에 대해 이러한 경고를 찾을 수 있습니다.
웹 서버 인프라에 대한 인기 있는 DDoS 공격 중 하나는 (의사) 무작위 하위 도메인 이름(예: abpdrsguvjkyz.www.dedeni.com
)에 대해 유효한 DNS 재귀 쿼리를 수행하여 (주) DNS 서버의 리소스를 소진시키는 것입니다.
기타 프로그램(특히 모바일 기반)은 잠재적으로 민감한 데이터를 원격 비콘 포스트로 보내는 악성 코드와 유사한 동작을 나타냅니다. Maltrail은 다음 예와 같은 동작을 캡처하려고 시도합니다.
다른 모든 보안 솔루션과 마찬가지로 Maltrail은 "오탐지" 경향이 있습니다. 이러한 종류의 경우 Maltrail은(특히 suspicious
위협의 경우) 일반 사용자의 행동을 기록하고 이를 악의적이거나 의심스러운 것으로 표시합니다. 다음 예에서는 블랙리스트 피드 제공자 blocklist.de
일반 Google 서버를 attacker
로 표시하여 다음과 같은 위협이 발생하는 것을 볼 수 있습니다.
트레일 위로 마우스를 가져가면 searX 검색 결과 프레임에 이것이 (아마도) 일반 Google 서버임을 알 수 있습니다.
또 다른 예로, 일반 .work
도메인(악의적인 목적으로 널리 사용되는 TLD)에 액세스하면 다음과 같은 위협이 발생합니다.
그럼에도 불구하고 관리자는 다음 예와 같이 추가 시간을 투자하여 "의심스러운"이 악의적인지 여부를 (다른 방법으로) 확인해야 합니다.
우분투/데비안 에서
sudo apt-get install git python3 python3-dev python3-pip python-is-python3 libpcap-dev build-essential procps schedtool
sudo pip3 install pcapy-ng
cd /tmp
git clone --depth 1 https://github.com/stamparm/maltrail.git
sudo mv /tmp/maltrail /opt
sudo chown -R $USER : $USER /opt/maltrail
SUSE/openSUSE 에서
sudo zypper install gcc gcc-c++ git libpcap-devel python3-devel python3-pip procps schedtool
sudo pip3 install pcapy-ng
cd /tmp
git clone --depth 1 https://github.com/stamparm/maltrail.git
sudo mv /tmp/maltrail /opt
sudo chown -R $USER : $USER /opt/maltrail
작업 환경 설정:
sudo mkdir -p /var/log/maltrail
sudo mkdir -p /etc/maltrail
sudo cp /opt/maltrail/maltrail.conf /etc/maltrail
sudo nano /etc/maltrail/maltrail.conf
실행 환경 설정:
crontab -e # autostart server & periodic update
*/5 * * * * if [ -n "$(ps -ef | grep -v grep | grep 'server.py')" ]; then : ; else python3 /opt/maltrail/server.py -c /etc/maltrail/maltrail.conf; fi
0 1 * * * cd /opt/maltrail && git pull
sudo crontab -e # autostart sensor & periodic restart
*/1 * * * * if [ -n "$(ps -ef | grep -v grep | grep 'sensor.py')" ]; then : ; else python3 /opt/maltrail/sensor.py -c /etc/maltrail/maltrail.conf; fi
2 1 * * * /usr/bin/pkill -f maltrail
systemd 서비스로 활성화(Linux에만 해당):
sudo cp /opt/maltrail/maltrail-sensor.service /etc/systemd/system/maltrail-sensor.service
sudo cp /opt/maltrail/maltrail-server.service /etc/systemd/system/maltrail-server.service
sudo systemctl daemon-reload
sudo systemctl start maltrail-server.service
sudo systemctl start maltrail-sensor.service
sudo systemctl enable maltrail-server.service
sudo systemctl enable maltrail-sensor.service
systemctl status maltrail-server.service && systemctl status maltrail-sensor.service
참고 : /maltrail-sensor.service
/maltrail-server.service
미리 시작하지 않고도 전용 서비스로 시작할 수 있습니다. 이는 /maltrail-server.service
가 설치되어 네트워크 환경의 다른 시스템에서 작동하는 경우에 유용합니다.
이 소프트웨어는 MIT 라이선스에 따라 제공됩니다. 자세한 내용은 함께 제공되는 LICENSE 파일을 참조하세요.
1 (전용) 트레일 사용
2 트레일 연결 커넥터(전용)