해시 매칭
해시 매칭은 PRX-SD 탐지 파이프라인의 첫 번째이자 가장 빠른 레이어입니다. 스캔된 모든 파일에 대해 PRX-SD는 암호화 해시를 계산하고 알려진 악성 해시의 로컬 데이터베이스에서 조회합니다. 매치는 해당 파일이 알려진 악성코드 샘플의 정확한 바이트 단위 복사본임을 의미합니다.
작동 방식
- 해시 계산 -- PRX-SD는 파일의 SHA-256 해시를 계산합니다. VirusShare 조회의 경우 MD5 해시도 계산됩니다.
- LMDB 조회 -- 해시는 메모리 매핑된 B+ 트리를 사용하여 LMDB 데이터베이스에서 확인됩니다. 이는 O(1) 평균 케이스 조회 시간을 제공합니다.
- 메타데이터 검색 -- 매치가 발견되면 연관된 메타데이터(소스, 악성코드 패밀리, 최초 발견 날짜)가 반환됩니다.
- 판정 -- 해시 매치는 즉시
MALICIOUS판정을 낳고 나머지 탐지 레이어는 건너뜁니다.
성능
| 작업 | 시간 |
|---|---|
| SHA-256 계산 (1 KB 파일) | ~2마이크로초 |
| SHA-256 계산 (10 MB 파일) | ~15밀리초 |
| LMDB 조회 | ~0.5마이크로초 |
| 파일당 총 시간 (작은 파일, 해시 히트) | ~3마이크로초 |
LMDB는 메모리 매핑 파일을 사용하므로 운영 체제의 페이지 캐시가 자주 접근하는 데이터베이스 부분을 RAM에 유지합니다. 충분한 메모리를 가진 시스템에서 조회는 거의 무료입니다.
지원 해시 유형
| 해시 유형 | 크기 | 사용 |
|---|---|---|
| SHA-256 | 256비트 (64개의 16진수 문자) | 모든 조회의 기본 해시. abuse.ch 피드 및 내장 블록리스트에서 사용. |
| MD5 | 128비트 (32개의 16진수 문자) | VirusShare 데이터베이스 호환성을 위해 사용. VirusShare 데이터가 있을 때만 계산. |
MD5 한계
MD5는 암호학적으로 취약하며 충돌 공격에 취약합니다. PRX-SD는 VirusShare 데이터베이스와의 하위 호환성을 위해서만 MD5를 사용합니다. SHA-256이 다른 모든 소스의 기본 해시입니다.
데이터 소스
PRX-SD는 여러 위협 인텔리전스 피드에서 해시 시그니처를 집계합니다:
| 소스 | 해시 유형 | 무료 | 내용 | 업데이트 빈도 |
|---|---|---|---|---|
| abuse.ch MalwareBazaar | SHA-256 | 예 | 최근 48시간 악성코드 샘플 | 5분마다 |
| abuse.ch URLhaus | SHA-256 | 예 | 악성 URL에서 배포된 악성코드 파일 | 시간별 |
| abuse.ch Feodo Tracker | SHA-256 | 예 | 뱅킹 트로이목마 (Emotet, Dridex, TrickBot) | 5분마다 |
| abuse.ch ThreatFox | SHA-256 | 예 | 커뮤니티 IOC 공유 플랫폼 | 시간별 |
| VirusShare | MD5 | 예 | 20M+ 악성코드 해시 (과거 데이터) | 주기적 |
| 내장 블록리스트 | SHA-256 | 번들 | EICAR, WannaCry, NotPetya, Emotet 등 | 릴리스와 함께 |
총 해시 커버리지
| 업데이트 모드 | 해시 수 | 데이터베이스 크기 |
|---|---|---|
표준 (sd update) | ~28,000개 SHA-256 | ~5 MB |
전체 (sd update --full) | ~28,000개 SHA-256 + 20M+ MD5 | ~800 MB |
해시 데이터베이스 업데이트
표준 업데이트
모든 abuse.ch 피드에서 최신 SHA-256 해시를 가져옵니다:
sd update이것은 PRX-SD가 처음 설치될 때 자동으로 실행되며 cron 또는 sd service로 지속적인 업데이트를 예약할 수 있습니다.
전체 업데이트
완전한 VirusShare MD5 데이터베이스를 포함합니다:
sd update --full전체 모드 사용 시기
VirusShare 데이터베이스에는 몇 년 전으로 거슬러 올라가는 20M+ 개의 MD5 해시가 포함되어 있습니다. 포렌식 조사 및 종합적인 스캔에 유용하지만 데이터베이스에 ~800 MB를 추가합니다. 일상적인 보호를 위해서는 표준 업데이트로 충분합니다.
수동 해시 가져오기
텍스트 파일(한 줄에 하나의 해시)에서 사용자 정의 해시 목록을 가져옵니다:
sd import my_hashes.txtimport 명령어는 문자열 길이에 따라 해시 유형(SHA-256 또는 MD5)을 자동으로 감지합니다. 메타데이터도 지정할 수 있습니다:
sd import my_hashes.txt --source "internal-ir" --family "custom-trojan"LMDB 데이터베이스
PRX-SD는 해시를 LMDB(Lightning Memory-Mapped Database)에 저장합니다. 다음 특성으로 선택되었습니다:
| 특성 | 이점 |
|---|---|
| 메모리 매핑 I/O | 제로 카피 읽기, 직렬화 오버헤드 없음 |
| B+ 트리 구조 | O(1) 상각 조회 |
| ACID 트랜잭션 | 업데이트 중 안전한 동시 읽기 |
| 충돌 저항성 | 카피-온-라이트가 손상 방지 |
| 컴팩트 크기 | 해시 키의 효율적인 저장 |
데이터베이스는 기본적으로 ~/.local/share/prx-sd/signatures.lmdb에 저장됩니다. 경로를 사용자 정의할 수 있습니다:
# ~/.config/prx-sd/config.toml
[database]
path = "/opt/prx-sd/signatures.lmdb"데이터베이스 상태 확인
현재 해시 데이터베이스 통계를 봅니다:
sd infoPRX-SD 시그니처 데이터베이스
=========================
SHA-256 해시: 28,428개
MD5 해시: 0개 (VirusShare의 경우 'sd update --full' 실행)
YARA 규칙: 38,800개
데이터베이스 경로: /home/user/.local/share/prx-sd/signatures.lmdb
데이터베이스 크기: 4.8 MB
마지막 업데이트: 2026-03-21 10:00:00 UTC파이프라인에서의 역할
해시 매칭이 첫 번째 방어선으로 설계된 이유:
- 속도 -- 파일당 ~3마이크로초로 무시할 수 있는 오버헤드를 추가합니다. 백만 개의 깨끗한 파일을 3초 이내에 확인할 수 있습니다.
- 오탐지 없음 -- SHA-256 매치는 파일이 알려진 악성코드 샘플과 동일하다는 암호학적 보장입니다.
- 단락 -- 해시 매치가 발견되면 YARA 및 휴리스틱 분석을 완전히 건너뛰어 상당한 처리 시간을 절약합니다.
해시 매칭의 한계는 알려진 샘플의 정확한 복사본만 탐지한다는 것입니다. 한 바이트의 수정이 다른 해시를 생성하여 이 레이어를 회피합니다. 이것이 YARA 및 휴리스틱 레이어가 이후 방어로 존재하는 이유입니다.
다음 단계
- YARA 규칙 -- 변형 및 패밀리에 대한 패턴 기반 탐지
- 휴리스틱 분석 -- 알려지지 않은 위협에 대한 행동 탐지
- 탐지 엔진 개요 -- 모든 레이어가 함께 작동하는 방식
- 파일 및 디렉토리 스캔 -- 실제로 해시 매칭 사용