
SALT - 리눅스 커널용 SLUB ALlocator Tracer
salt에 오신 것을 환영합니다. 이 도구는 커널 힙 메모리 관리를 역분석하고 학습하기 위한 도구입니다. 익스플로잇을 개발하거나, 자신의 커널 코드를 디버깅하거나, 더 중요한 것은 커널 힙 할당을 가지고 놀며 내부 동작 방식을 배우는 데 유용할 수 있습니다.
이 도구는 최신 리눅스 커널에서 SLUB 할당자의 할당 및 현재 상태를 추적하는 데 도움을 줍니다.
이는 gdb 플러그인으로 작성되었으며, 메모리 할당을 *추적(trace)*하고 *기록(record)*하며, 프로세스 이름이나 캐시별로 *필터링(filter)*할 수 있습니다. 이 도구는 활성 캐시 목록을 덤프하고 관련 정보를 출력할 수도 있습니다.
이 저장소에는 원할 때 할당 및 해제를 트리거할 수 있는 플레이그라운드(playground) 로드 가능한 커널 모듈도 포함되어 있어, 디버깅 도구이자 할당자의 작동 방식을 더 잘 이해하기 위한 학습 도구로 사용할 수 있습니다.
SLUB 할당자의 내부 동작 방식, 시작하는 방법, 플러그인의 상세 문서, 플레이그라운드 모듈에 대한 참고 사항에 대한 더 많은 정보는 docs 폴더에서 확인할 수 있습니다.
전체 명령어 목록은 다음과 같습니다:
> salt help
Possible commands:
filter -- 다음 인수 중 하나를 추가하여 필터링 기능을 관리합니다
enable -- 필터링을 활성화합니다. 필터링된 프로세스에 대한 정보만 표시됩니다.
disable -- 필터링을 비활성화합니다. 모든 프로세스에 대한 정보가 표시됩니다.
status -- 현재 필터링 매개변수를 표시합니다.
add process/cache <arg>-- 하나 이상의 필터링 조건을 추가합니다.
remove process/cache <arg>-- 하나 이상의 필터링 조건을 제거합니다.
set -- 복잡한 필터링 규칙을 지정합니다. 지원되는 구문은 "salt filter set (cache1 or cache2) and (process1 or process2)"입니다.
일부 변형이 허용될 수 있습니다. "salt filter status"로 확인하는 것이 좋습니다. 더 간단한 규칙은 "salt filter add"를 사용하세요.
record -- 다음 인수 중 하나를 추가하여 기록 기능을 관리합니다
on -- 기록을 활성화합니다. 필터링된 프로세스에 대한 정보가 히스토리에 추가됩니다.
off -- 기록을 비활성화합니다.
show -- 기록된 히스토리를 표시합니다.
clear -- 기록된 히스토리를 삭제합니다.
trace <proc name> -- 모든 필터를 재설정하고 특정 프로세스에 대한 필터링을 구성합니다
walk -- 모든 활성 캐시를 탐색하고 관련 정보를 출력합니다
walk_html -- 모든 활성 캐시를 탐색하고 관련 정보를 html 형식으로 생성합니다
walk_json -- 모든 활성 캐시를 탐색하고 관련 정보를 json 형식으로 생성합니다
help -- 이 메시지를 표시합니다
그리고 여기 salt의 실제 작동 모습을 볼 수 있습니다:

이 프로젝트는 EURECOM에서 2018년 봄 학기 프로젝트로 개발되었습니다.
제 지도 교수님인 Yanick, Fabio, Emanuele, Dario, Marius와 저를 도와주고 지도해 주신 S3 팀의 다른 분들께 깊은 감사를 드립니다.
프로젝트의 일환으로 EURECOM의 보안 팀을 대상으로 발표도 진행했습니다. 슬라이드는 여기에서 확인할 수 있습니다.
Perla E, Oldani M (2010) - A Guide to Kernel Exploitation: Attacking the Core