포렌식 도구를 만들때 이미징(.dd) 파일이나 이미징 파일에서 추출한 아티팩트들의 용량이 조금만 커지면, 분석이 안되어 중간에 끊기거나 응답 없음으로 되어버린다.
이미징 파일 원할한 분석을 위해서 속도 개선을 해볼꺼다.
이미징 파일 기반의 파일들은 Hexa값을 가지기 때문에 이때 조사하여 알아본 방법은 3가지 이다.
1. 캐싱 처리 방식
2. 메모리 매핑 방식
3. 병렬 처리 방식
캐싱 처리 방식
정의 :
분석 결과를 로컬 저장소에 저장하여 동일한 파일에 대한 재분석 시 기존 결과를 재사용하는 기법이다.
캐싱 처리 방식의 장/단점 :
1. 반복 분석 시 유용 : 동일한 파일에 대한 재분석하는 방식이므로 첫번째 보다 두번째가 빠르고, 두번째 보다 세번째가 더 빠르다.
2. 단점 : 파일이 변경이 되면 캐시가 무효화 된다.
Memory-Mapped 방식
정의 :
가상 메모리는 파일 또는 파일과 비슷한 리소스의 일부와 byte 단위로 상관관계가 직접 할당하는 것을 말한다.
-> 즉, 정리하여 말하자면 파일을 메모리에 직접 로드하지 않고도 메모리처럼 접근할 수 있다.
해당 Memory-Mapped 방식이 빠른 이유는 다음과 같다.
1. 프로그램의 로컬 메모리를 변경하는 것은 System call을 호출하는 것보다 훨씬 빠르다.
2. 캐싱 방식보다 훨씬 빠르다.
-> 실제로 매핑되는 메모리 영역은 커널 페이지 캐시인데, 사용자 공간에 복사본을 만드는 캐싱 방법과 다르다.
페이지 내부에서 처리되므로 전체 파일을 메모리에 로드 하지 않는다.
3. 지연 로딩 사용 : 필요한 부분만 실제 메모리에 로드
병렬 처리(Parallel Processing) 방식
정의 :
대용량 파일을 여러 개의 작업을 동시에 실행하여 효율을 높이는 것을 말한다.
1. 해당 파일을 동시에 해결할 수 있는 개별적인 부분 문제로 나누어짐
2. 부분문제에서 세분화하여 서로 다른 프로세서(코어-쓰레드)에서 동시에 실행
* 프로세서 : CPU, 명령어 해석, 코어, 쓰레드
- 코어 : 한번에 N개의 쓰레드를 처리하는 단위
- 쓰레드 : CPU 내부에서 작업을 수행하는 가장 작은 단위
프로세스 :
- 실행되는 프로그램 의미
- 메모리에 올라와 실행되고 있는 프로그램 인스턴스
- 운영체제로 부터 시스템 자원을 할당 받는 작업의 단위
성능 향상 원리
- CPU 코어 활용: 멀티코어 프로세서의 모든 코어 동시 사용
- GIL 우회: 프로세스 단위 병렬화로 Python GIL 제약 극복
- 분할 정복: 큰 문제를 작은 문제들로 나누어 해결
- I/O 병렬화: 여러 위치에서 동시에 파일 읽기
최종적으로, 속도 개선을 위해서 결정한 나의 선택은 Memory-Mapped 방식과 병렬 처리 방식을 사용하였다.
내가 현재 상황에서 최대한으로 뽑을 수 있는 이미징의 크기는 185GB, 해당 이미징에서 추출한 $J 파일의 크기는 10GB이다.
이를 원활하게 분석하기 위해서 아래와 같이 아키텍처 구성을 해보았다.
메인 워크플로우
파일 크기 확인 -> 크기에 맞는 분기 처리로 이동 -> 처리 실행 -> 결과 수집 -> 중복 제거
1. 📁 파일 접근 방식
- 메모리 매핑 (mmap): 파일을 메모리처럼 접근하는 기술
- 단일/병렬/최대 병렬 처리 모든 모드에서 동일하게 사용
2. 파일 크기별 처리 전략
- 5GB 이상: 최대 병렬 처리 모드 (최대 32개 프로세스)
- 500MB~5GB: 병렬 처리 모드 (최대 16개 프로세스)
- 500MB 미만: 단일 프로세스 모드 (프로세스 1개)
3. 병렬 처리 모드 알고리즘
1. 최대 병렬 처리 모드 (5GB 이상)
chunk_size = 512 * 1024 * 1024 # 512MB 단위
- 고정 크기: 512MB씩 분할
- 빈 청크 감지: 빈 청크는 자동 스킵
2. 일반 병렬 처리 모드 (500MB~5GB)
num_processes = min(16, mp.cpu_count() * 2)
chunk_size = file_size // num_processes # 동적 크기
- 동적 크기: 파일크기 ÷ 프로세스 수
- 예시: 2GB 파일, 16개 프로세스 → 128MB씩
3. 단일 프로세스 모드 (500MB 미만)
4. 삭제 플래그를 탐지
5. GUI 상에 탐지 결과 노출
'CTF 및 대회 > 2024 사이버 시큐리티 해커톤' 카테고리의 다른 글
2024 Cyber security Hackathon 대회 후기 (0) | 2025.03.10 |
---|