마인드셰어: 바이너리 닌자 API를 사용하여 잠재적인 ... 노트

마인드셰어: 바이너리 닌자 API를 사용하여 잠재적인 사용 후 해제 취약점 감지

사용 후 해제 버그(use-after-free bugs)는 메모리 손상 유형 중 하나로, 정적으로 탐지하기 어렵습니다. 이 게시물은 Binary Ninja의 MLIL을 사용하여 메모리 할당 상호 작용을 추적하는 데이터 흐름 그래프를 생성하는 방법을 탐구합니다. 그래프는 메모리 영역을 노드로, 포인터 저장을 엣지로 표현하며, 추적된 할당, 스택 프레임, 동적 메모리 및 전역 메모리 노드를 사용합니다. SSA 변수는 노드에 매핑되고, 포인터 산술을 나타내는 오프셋이 저장됩니다. 메모리 저장 및 로드 연산은 그래프의 엣지를 생성하며, 함수 범위 외부의 로드에 대해 이전 초기화를 가정합니다. 정보는 SSA 변수 할당 및 포인터 산술 중 오프셋 계산에 따라 그래프를 통해 전파됩니다. 인수에 매핑이 있거나 스택 오프셋이 특정 조건을 충족하는 경우 호출자 함수가 분석되며, 무한 루프를 방지하기 위해 재귀를 관리합니다. 그래프 생성 후, 추적된 할당 노드에 의존하는 명령어가 로깅됩니다. 이 분석은 문맥에 민감하지 않은 도달 가능성(context-insensitive reachability)을 통해 잠재적인 UAF 취약성을 식별하는 데 도움이 됩니다. 이 접근 방식은 정적 분석의 내재된 분류 오류를 인정하지만, 다른 취약성에 대한 적응형 원시(primitives)를 강조합니다.
CdXz5zHNQW_I95VORuwRf.jpeg