
🐍 고성능, 멀티스레드 YARA & IOC 스캐너

Rust로 재작성된 Loki. 단일 바이너리에서 고성능 멀티스레드 YARA 및 IOC 스캐너.
상태: 베타. 작동하지만 여전히 활발히 개발 중입니다.
macOS에서 프로세스 메모리 스캔은 최선의 노력으로 이루어지며 일반적으로 디버깅 권한 또는 상승된 권한이 필요합니다. 이러한 권한이 없으면 Loki-RS는 여전히 파일을 스캔하지만 대부분의 프로세스 메모리를 읽을 수 없습니다. 필요한 경우 --no-procs를 사용하여 프로세스 스캔을 건너뛰십시오.
Linux에서 Loki-RS는 /proc/<pid>/mem을 읽기 전에 장치 지원 및 커널 특수 프로세스 매핑을 건너뜁니다. 이를 통해 일부 드라이버 관리 VMA로 인한 알려진 불안정성을 피하면서 일반 익명, 힙/스택 및 일반 파일 지원 메모리 스캔을 유지합니다. 여전히 환경별 문제가 발생하면 --no-procs를 사용하여 프로세스 스캔을 비활성화하십시오.
플랫폼에 맞는 사전 컴파일된 바이너리를 릴리스 페이지에서 다운로드하세요.
# Extract
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Update signatures (recommended)
./loki-util update
# Run
sudo ./loki --help
시그니처는 릴리스에 포함되어 있지만 빠르게 오래됩니다. loki-util update를 실행하여 최신 YARA-Forge Core 규칙을 가져오세요.
Loki-RS는 기본 시그니처 소스로 YARA Forge를 사용합니다. Loki-RS는 Core 규칙 세트(높은 정확도, 낮은 오탐, 성능 최적화)를 포함하고 업데이트합니다. 더 넓은 범위가 필요하면 YARA Forge에서 Extended 또는 Full 세트로 교체할 수 있습니다.
signatures/iocs/에 있는 IOC 파일은 선택적 로컬/사용자 정의 콘텐츠로 계속 지원됩니다.
# Basic scan (TUI enabled by default)
sudo ./loki
# Scan specific folder
sudo ./loki --folder /tmp
# Disable TUI, use standard command-line output
sudo ./loki --no-tui
# Scan a mounted image (skip process scanning, use all cores)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Slow and cautious scan (lower CPU limit, single thread)
sudo ./loki --cpu-limit 60 --threads 1
# Scan and send logs to remote syslog
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Option | Default | Description |
|---|---|---|
-f, --folder <PATH> | / | 스캔할 폴더입니다. 공백이 포함된 경로는 따옴표로 묶으세요. 예: -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
Loki-RS는 스캔에서 파일 및 폴더를 제외하는 여러 메커니즘을 제공합니다.
Loki-RS는 기본적으로 다음을 자동으로 제외합니다:
시스템 디렉터리 (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/run클라우드 저장소 디렉터리 (--scan-all-drives를 사용하지 않는 경우):
네트워크 및 마운트된 드라이브 (--scan-all-drives를 사용하지 않는 경우):
/media, /volumes 아래의 외부 미디어프로그램 디렉터리:
알려진 정상 파일을 해시로 제외할 수 있습니다. 이는 오탐을 유발하는 합법적인 파일을 허용 목록에 추가하는 데 유용합니다.
설정:
파일명에 hash 및 falsepositive가 모두 포함된 파일을 signatures/iocs/에 생성합니다.
예: hash-falsepositive-custom.txt
해시(MD5, SHA1 또는 SHA256)를 선택적 설명과 함께 추가합니다:
# Format: HASH;description
d41d8cd98f00b204e9800998ecf8427e;Empty file - known good
a7f5f35426b927411fc9231b56382173;Legitimate system utility
이러한 해시와 일치하는 파일은 스캔 중 자동으로 건너뜁니다.
signatures/iocs/filename-iocs.txt에 파일명 IOC를 추가할 때 세 번째 열에 오탐 제외 정규식을 지정할 수 있습니다:
# Format: REGEX;SCORE;FALSE_POSITIVE_REGEX
#
# This matches all .ps1 files, but excludes those in SysInternals directories
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
파일이 기본 패턴과 오탐 정규식 모두에 일치하면 보고되지 않습니다.
config/excludes.cfg 파일은 정규식 기반 경로 제외를 지원합니다:
# Exclude system directories
^/proc/.*
^/dev/.*
^/sys/.*
# Exclude temporary files
.*\.tmp$
.*\.temp$
.*\.swp$
# Exclude specific directories
.*node_modules.*
.*/\.git/.*
참고: 경로 제외 패턴은 정규식을 사용하여 전체 파일 경로와 일치시킵니다. #으로 시작하는 줄은 주석입니다.
# Scan but include all drives (network, cloud, mounted)
sudo ./loki --scan-all-drives
# Scan all file types, not just executables and scripts
sudo ./loki --scan-all-files
# Scan only small files (under 10MB)
sudo ./loki --max-file-size 10000000
# Skip process scanning (useful for mounted images)
sudo ./loki --no-procs --folder /mnt/image
터미널 인터페이스는 기본적으로 활성화되어 있으며 스캔 중 실시간 모니터링을 제공합니다.
sudo ./loki --folder /path/to/scan


Loki-RS는 각 스캔 후 자동으로 스타일이 지정된 HTML 보고서를 생성합니다. 보고서는 JSONL 로그 파일과 함께 생성되며 모든 결과의 시각적 요약을 제공합니다.
보고서에는 다음이 포함됩니다:

HTML 보고서는 JSONL 출력과 동일한 기본 파일명을 공유합니다 (예: loki_hostname_2025-01-08.html). 보고서 생성을 비활성화하려면 --no-html을 사용하세요.
loki-util을 사용하여 기존 JSONL 파일에서 HTML 보고서를 생성할 수 있습니다:
# Generate HTML report from a single JSONL file
./loki-util html --input scan_results.jsonl --output report.html
# Generate combined HTML report from multiple JSONL files
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# Use glob patterns to match multiple files
./loki-util html --input "/path/to/scans/*.jsonl" --combine --output combined.html
옵션:
--input <file|glob> - 입력 JSONL 파일 또는 glob 패턴 (필수)--output <file.html> - 출력 HTML 파일 (선택 사항, 기본값은 입력 파일명에 .html 확장자 추가)--combine - 여러 JSONL 파일을 하나의 보고서로 결합 (결과를 호스트명별로 그룹화)--title <str> - 보고서 제목 재정의--host <str> - 보고서의 호스트명 재정의결합된 보고서 모드는 여러 호스트 또는 시간대의 스캔 결과를 단일 보기로 집계하는 데 유용하며, 결과는 원본 호스트명별로 그룹화됩니다.
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Rust 툴체인이 필요합니다. 크로스 컴파일에 대한 내용은 docs/BUILD.md를 참조하세요.
Loki RS는 사이드 프로젝트입니다. 실용적인 분류 및 실험을 위해 구축된 빠른 단일 바이너리 스캐너이며, 아이디어가 시도되고 제거됨에 따라 빠르게 변경될 수 있습니다.
지원은 커뮤니티 기반이며 최선의 노력으로 제공됩니다. - SLA, 보장된 응답 시간, 또는 모든 엣지 케이스가 완벽하게 처리된다는 약속은 없습니다. 프로덕션에서 실행하는 경우 이를 염두에 두고 실행하십시오.
예측 가능한 지원과 더 광범위하고 잘 테스트된 기능 세트를 갖춘 기업 환경 및 침해 대응 작업을 위해 Nextron Systems는 THOR (및 THOR Lite)를 유지 관리합니다. THOR는 광범위한 아티팩트 적용, 더 많은 모듈 및 형식, 공급업체 지원을 갖춘 전문 스캐너입니다. THOR Lite는 범위가 축소된 무료 진입 버전입니다.
GNU 일반 공중 사용 허가서 v3.0. LICENSE를 참조하세요.
Copyright (c) 2025 Florian Roth
| Option | Default | Description |
|---|
--no-procs | false | 프로세스 메모리 스캔 건너뜀 |
--no-fs | false | 파일 시스템 스캔 건너뜀 |
--no-archive | false | 아카이브(ZIP) 내부 스캔 건너뜀 |
--scan-all-drives | false | 마운트/네트워크/클라우드를 포함한 모든 드라이브 스캔 |
--scan-all-files | false | 확장자/유형에 관계없이 모든 파일 스캔 |
| Option | Default | Description |
|---|
-l, --log <FILE> | auto | 일반 텍스트 로그 파일 |
--no-log | false | 일반 텍스트 로그 출력 비활성화 |
-j, --jsonl <FILE> | auto | JSONL 출력 파일 |
--no-jsonl | false | JSONL 출력 비활성화 |
--no-html | false | HTML 보고서 생성 비활성화 |
--no-tui | false | TUI 비활성화, 표준 명령줄 출력 사용 |
-r, --remote <HOST:PORT> | none | 원격 syslog 대상 |
-p, --remote-proto <PROTO> | udp | 원격 프로토콜 (udp/tcp) |
--remote-format <FMT> | syslog | 원격 형식 (syslog/json) |
| Option | Default | Description |
|---|
--alert-level <SCORE> | 80 | ALERT에 대한 점수 임계값 |
--warning-level <SCORE> | 60 | WARNING에 대한 점수 임계값 |
--notice-level <SCORE> | 40 | NOTICE에 대한 점수 임계값 |
--max-reasons <NUM> | 2 | 검색 결과당 표시할 최대 일치 사유 수 |
-m, --max-file-size <BYTES> | 64000000 | 스캔할 최대 파일 크기 (64MB) |
--yara-timeout <SECONDS> | 10 | 각 파일 또는 프로세스 메모리 버퍼에 대한 최대 YARA 스캔 시간 (최소: 1초) |
-c, --cpu-limit <PERCENT> | 100 | CPU 사용률 제한 (1-100) |
--threads <NUM> | -2 | 스레드 수 (0=모두, -1=모두-1, -2=모두-2) |
| Option | Default | Description |
|---|
--version | - | 버전 표시 후 종료 |
-d, --debug | false | 디버그 출력 표시 |
--trace | false | 상세 추적 출력 표시 |
--show-access-errors | false | 파일/프로세스 접근 오류 표시 |
| Option | Description |
|---|
--scan-all-drives | 마운트된 드라이브, 네트워크 드라이브 및 클라우드 저장소 포함 |
--scan-all-files | 파일 유형/확장자에 관계없이 모든 파일 스캔 (기본적으로 관련 파일 유형만 스캔됨) |
-m, --max-file-size <BYTES> | 이 크기보다 큰 파일 건너뜀 (기본값: 64MB) |
--no-procs | 프로세스 메모리 스캔을 완전히 건너뜀 |
--no-fs | 파일 시스템 스캔을 완전히 건너뜀 |
--no-archive | 아카이브 파일(ZIP) 내부 스캔 건너뜀 |
| Key | Action |
|---|
q | 종료 |
p | 일시 중지/재개 |
s | 현재 항목 건너뛰기 |
t | 스레드 오버레이 전환 |
+ / - | CPU 제한 조정 |
| Arrow keys | 로그 스크롤 |