
IOC 및 YARA 기반 스캐너로, 파일 이름 정규식, YARA 시그니처, 해시 매칭, 그리고 엔드포인트에서의 C2 백커넥트 검사를 통해 침해 지표를 탐지합니다.
새로운 오픈소스 YARA 스캐너 LOKI RS(Rust)를 작성했습니다. LOKI(Python)는 이제 공식적으로 지원이 종료되었습니다.
이 프로젝트는 현재 유지보수 비활성 모드입니다. 즉, 버그 수정 및 간단한 이슈에 대한 풀 리퀘스트는 병합하지만, 새로운 기능을 추가하거나 기존 기능을 확장할 시간이 부족합니다. 수년간 저는 이 프로젝트보다 다양한 개선 사항을 제공하는 고급 스캐너 THOR 개발에 집중해 왔습니다. 무료 버전인 THOR Lite를 사용할 수 있습니다. 더 빠르고 안정적이며 CI 환경에서 엄격하게 테스트되었습니다. 더 나은 솔루션입니다. 오픈소스, 무료 및 상용 스캐너 비교는 여기에서 확인할 수 있습니다.
또한 LOKI의 Rust 기반 버전인 LOKI 2 작업을 시작했습니다. 하지만 현재 LOKI 릴리스와 기능적 동등성을 언제 달성할지는 확실하지 않습니다. 또한, 어떤 스캐너가 귀하의 요구에 가장 적합한지 결정하는 데 도움이 되는 플로우 차트를 만들었습니다.

침해 지표(IOC)를 위한 간단한 스캐너
탐지는 네 가지 탐지 방법을 기반으로 합니다:
1. 파일 이름 IOC
전체 파일 경로/이름에 대한 정규식 일치
2. Yara 규칙 확인
파일 데이터 및 프로세스 메모리에 대한 Yara 서명 일치
3. 해시 확인
알려진 악성 해시(MD5, SHA1, SHA256)와 스캔된 파일 비교
4. C2 백 연결 확인
프로세스 연결 엔드포인트와 C2 IOC 비교(v10 버전부터 신규)
추가 확인:
1. Regin 파일 시스템 확인 (--reginfs 사용)
2. 프로세스 이상 확인 ([Sysforensics](http://goo.gl/P99QZQ) 기반)
3. SWF 압축 해제 스캔 (v0.8 버전부터 신규)
4. SAM 덤프 확인
Windows 바이너리는 PyInstaller로 컴파일되었으며 x86 및 x64 기반 시스템에서 x86 응용 프로그램으로 실행되어야 합니다.
컴파일된 EXE를 사용하는 경우 요구 사항이 없습니다.
직접 빌드하려면:
usage: loki.py [-h] [-p path] [-s kilobyte] [-l log-file] [-r remote-loghost]
[-t remote-syslog-port] [-a alert-level] [-w warning-level]
[-n notice-level] [--allhds] [--alldrives] [--printall]
[--allreasons] [--noprocscan] [--nofilescan] [--vulnchecks]
[--nolevcheck] [--scriptanalysis] [--rootkit] [--noindicator]
[--dontwait] [--intense] [--csv] [--onlyrelevant] [--nolog]
[--update] [--debug] [--maxworkingset MAXWORKINGSET]
[--syslogtcp] [--logfolder log-folder] [--nopesieve]
[--pesieveshellc] [--nolisten]
[--excludeprocess EXCLUDEPROCESS] [--force]
Loki - 간단한 IOC 스캐너
선택적 인수:
-h, --help 도움말 메시지 표시 후 종료
-p path 스캔할 경로
-s kilobyte 확인할 최대 파일 크기(KB, 기본값 5000 KB)
-l log-file 로그 파일
-r remote-loghost 원격 syslog 시스템
-t remote-syslog-port
원격 syslog 포트
-a alert-level 경고 점수
-w warning-level 경고 점수
-n notice-level 알림 점수
--allhds 모든 로컬 하드 드라이브 스캔 (Windows 전용)
--alldrives 모든 드라이브 스캔 (네트워크 드라이브 및 이동식 미디어 포함)
--printall 스캔된 모든 파일 출력
--allreasons 점수에 영향을 준 모든 이유 출력
--noprocscan 프로세스 스캔 건너뛰기
--nofilescan 파일 스캔 건너뛰기
--vulnchecks 취약점 검사 실행
--nolevcheck Levenshtein 거리 검사 건너뛰기
--scriptanalysis 스크립트 통계 분석을 통한 난독화 코드 탐지 (베타)
--rootkit 루트킷 검사 건너뛰기
--noindicator 진행 표시기 표시하지 않음
--dontwait 종료 시 대기하지 않음
--intense 집중 스캔 모드 (알 수 없는 파일 유형 및 모든 확장자도 스캔)
--csv CSV 로그 형식을 STDOUT에 출력 (머신 처리용)
--onlyrelevant 경고 또는 알림만 출력
--nolog 로컬 로그 파일 쓰지 않음
--update "signature-base" 하위 저장소에서 서명 업데이트
--debug 디버그 출력
--maxworkingset MAXWORKINGSET
스캔할 프로세스의 최대 작업 세트 크기(MB, 기본값 100 MB)
--syslogtcp syslog 로깅에 UDP 대신 TCP 사용
--logfolder log-folder
로그 파일이 지정되지 않은 경우 로깅에 사용할 폴더
--nopesieve pe-sieve 스캔 수행하지 않음
--pesieveshellc pe-sieve 셸코드 스캔 수행
--nolisten 수신 연결 표시하지 않음
--excludeprocess EXCLUDEPROCESS
스캔에서 제외할 실행 파일 이름 지정, 여러 번 사용 가능
--force 특정 폴더 강제 스캔 (LOKI 코드에서 하드 제외된 경우에도)
버전 0.15부터 Yara 서명은 하위 저장소 signature-base에 있습니다. LOKI를 ZIP 파일로 다운로드하면 하위 저장소를 가져올 수 없습니다. 저장소를 클론하면 포함됩니다.
해시 및 파일 이름에 대한 IOC 파일은 './signature-base/iocs' 폴더에 저장됩니다. './signature-base/yara' 폴더에 있는 모든 '.yar' 파일은 이미 포함된 규칙 세트와 함께 초기화됩니다. 서명 일치 시 메시지 수준을 정의하려면 'score' 값을 사용하십시오.
해시, C2 및 파일 이름 IOC는 './signature-base/iocs' 하위 폴더에 파일을 추가하여 추가할 수 있습니다. 모든 해시 IOC 및 파일 이름 IOC 파일은 LOKI에서 사용하는 형식(기본 파일 참조)을 따라야 합니다. 파일 이름에 "hash", "filename" 또는 "c2" 문자열이 포함되어야 초기화 시 가져옵니다.
해시 IOC의 경우(새 줄로 구분, 해시 유형은 자동 감지):
Hash;Description [Reference]
파일 이름 IOC의 경우(새 줄로 구분):
# (선택 사항) Description [Reference]
Filename as Regex[;Score as integer[;False-positive as Regex]]
버전 v0.16.2부터 LOKI는 "./config" 폴더의 "excludes.cfg"를 통해 사용자 정의 제외 정의를 지원합니다. 각 줄은 디렉터리 탐색 중 전체 파일 경로에 적용되는 정규식입니다. 이를 통해 드라이브 이름에 관계없이 특정 디렉터리, 특정 폴더의 파일 확장자, 바이러스 백신 검사에 민감한 제품에 속하는 모든 파일 및 디렉터리를 제외할 수 있습니다.
'''exclude.cfg'''는 다음과 같습니다:
# 제외된 디렉터리
#
# - 스캔에서 제외할 디렉터리 추가
# - 백슬래시 이중 이스케이프
# - 값은 대소문자를 구분하지 않음
# - Windows에서는 백슬래시, Linux/Unix/OSX에서는 슬래시 사용
# - 각 줄에는 전체 경로의 일부와 일치하는 정규식(대소문자 구분 안 함)이 포함됩니다.
# 예:
# Regex: \\System32\\
# 일치: C:\Windows\System32\cmd.exe
#
# Regex: /var/log/[^/]+\.log
# 일치: /var/log/test.log
# 불일치: /var/log/test.gz
#
# 유용한 예시
\\Ntfrs\\
\\Ntds\\
\\EDB[^\.]+\.log
Sysvol\\Staging\\Nntfrs_cmp
\\System Volume Information\\DFSR
Loki 스캔

Regin 일치

Regin 오탐

해시 기반 IOC

파일 이름 기반 IOC

생성된 로그 파일

LOKI 스캐너 회사 홈페이지 https://www.nextron-systems.com/loki/
APT 스캐닝을 위한 기업용 솔루션에 관심이 있다면 Loki의 큰 형 THOR를 확인하세요.
PyInstaller를 다운로드하고 pyinstaller 프로그램 디렉터리로 이동하여 다음을 실행하십시오:
python ./pyinstaller.py -F C:\path\to\loki.py
그러면 하위 폴더 ./loki/dist에 loki.exe가 생성됩니다.
msvcr100.dll을 포함하여 대상 OS 호환성을 개선하려면 ./loki/loki.spec 파일에서 a.binaries,를 포함하는 줄을 다음과 같이 변경하십시오:
a.binaries + [('msvcr100.dll', 'C:\Windows\System32\msvcr100.dll', 'BINARY')],
venv가 설치되어 있어야 하며, python -m venv path/to/venv를 실행합니다(path/to/venv는 가상 환경 경로). path/to/venv/bin/python --version을 실행하여 가상 환경을 테스트합니다.
가상 환경 모듈 pip, setuptools, wheel을 업그레이드하려면 path/to/venv/bin/python -m pip install --upgrade pip setuptools wheel을 실행합니다.path/to/venv/bin/python -m pip install colorama yara-python psutil rfc5424-logging-handler netaddrpath/to/venv/bin/python path/to/loki/loki-upgrader.py (path/to/loki는 Loki 저장소 경로).sudo path/to/venv/bin/python loki.pyYara 소스는 여기에서 다운로드하세요.
컴파일된 스캐너가 백신 엔진에 의해 탐지될 수 있습니다. 이는 스캐너가 일부 파일 시스템 및 프로세스 스캐닝 기능을 구현한 컴파일된 파이썬 스크립트이기 때문이며, 이러한 기능은 컴파일된 악성 코드에서도 사용됩니다.
컴파일된 실행 파일을 신뢰하지 않는다면 직접 컴파일하세요.
Loki - Simple IOC Scanner Copyright (c) 2015 Florian Roth
이 프로그램은 자유 소프트웨어입니다. 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서(GPL) 버전 3 또는 (선택에 따라) 이후 버전의 조건에 따라 재배포 및/또는 수정할 수 있습니다.
이 프로그램은 유용하기를 바라며 배포되지만, 어떠한 보증도 없습니다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증도 없습니다. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.
이 프로그램과 함께 GNU 일반 공중 사용 허가서의 사본을 받아야 합니다. 그렇지 않다면 http://www.gnu.org/licenses/를 참조하십시오.