보안
libAFL 개념 정리
libAFL 소개libAFL의 등장 배경AFL++, libFuzzer, Honggfuzz 등 주요하게 사용되는 퍼저가 존재하지만, 이들은 확장성 있게 설게되지 않았다. 퍼저 개발자는 이러한 기존 도구 중 하나를 포크하거나 처음부터 새로운 퍼저를 만들어야 한다. 어떤 경우든 연구자들은 서로 호환되지 않는 수많은 퍼저를 개발하게 되고, 퍼저의 뛰어난 기능을 새로운 프로젝트에 결합할 수도 없다.이런 갈라파고스화 문제를 해결하기 위해서, AFL++ 개발자들이 만든 퍼저 개발용 라이브러리가 libAFL이다. libAFL의 특징Rust 컴파일러가 동작하는 어떤 플랫폼에서도 사용할 수 있다.AFL++ 개발자들이 제작한 것으로, 최신 퍼징 트렌드를 반영했다.LLMP(저수준 메시지 전달)을 개발해 코어에 따라 기능을 선..
[번역] A Look at AFL++ Under The Hood
https://blog.ritsec.club/posts/afl-under-hood/ AFL++의 동작 과정을 자세히 분석한 위 글을 DeepL을 이용해 번역한 내용입니다. 일부 source, '여기'에 해당하는 링크는 누락되었을 수 있습니다. AFL++와 Coverage-Based Fuzzing은 무엇입니까? AFL은 무작위 입력 퍼저가 아닙니다. AFL은 커버리지 기반 퍼징이라는 것을 수행합니다. 커버리지 기반 퍼징의 기본 개념은 바이너리에서 어떤 영역이 실행되고 있는지 또는 커버리지가 있는지 추적하는 것입니다. 이 정보를 추적함으로써 어떤 입력이 코드의 어떤 부분을 실행하는지 파악할 수 있습니다. 이를 통해 코드베이스의 작은 하위 집합뿐만 아니라 전체 코드베이스를 포괄하는 입력 데이터베이스를 개발할 ..
펌웨어 에뮬레이팅 후 chroot: failed to run command `./bin/sh' 문제 해결
https://devdori.tistory.com/45 위의 글을 따라 iptime t24000 펌웨어를 에뮬레이팅하던 도중, chroot를 통해 루트 디렉토리를 변경하는 과정에서 다음과 같은 에러 메시지가 발생했다. chroot ./ ./bin/sh chroot: failed to run command `./bin/sh' mount, ldd 등 여러 방안을 시도해보았지만 해결되지 않았다. 원인은 binwalk로 파일을 추출하는 과정에 있었다. 오류 확인 binwalk -e 으로 루트파일시스템을 추출할 때 다음과 같은 오류가 발생하는 것을 확인했다. WARNING: Symlinks points outside of the extraction directory: ... changing link target ..
[하드웨어 해킹]OpenWrt 풀 시스템 퍼징
OpenWrt OpenWrt는 와이파이 라우터용 리눅스 기반 임베디드 펌웨어이다. 방화벽, 패킷포워딩 등 리눅스의 강력한 기능과 더불어 전체 파일 시스템과 필요에 맞게 확장 설치가 가능한패키지 매니저를 제공한다. 유명한 아키텍처라 QEMU와 VirtualBox에서 부드럽게 구동할 수 있다. OpenWrt를 실행하기 위한 ARM 아키텍처 에뮬레이팅 OpenWrt에서 미리 컴파일된 파일을 제공하므로 이를 사용한다. 위에서부터 커널 이미지 다운로드, 파일시스템, 파일시스템 추출 과정이다. wget -q https://downloads.openwrt.org/releases/21.02.3/targets/armvirt/32/openwrt-21.02.3-armvirt-32-zImage -O zImage wget -q..
[하드웨어 해킹] shannon 퍼징
모바일 폰 아키텍처 모바일 폰에서 주요한 프로세서는 컴퓨터의 CPU에 해당하는 애플리케이션 프로세서(AP)이다. 또한 Wi-Fi, NFC, 블루투스 라디오, GPS 등 다양한 센서가 담겨 있다. 우리는 연결 프로세서(Connection Processor, CP)를 살펴본다. 베이스밴드 AP는 안드로이드에서 리눅스 커널을 실행시키고, 실행된 OS는 CP와 상호작용하는 다양한 프로그램과 서비스를 실행한다. RILD(Radio Interface Layer Daemon)은 모뎀과 인터페이스를 제공하는 프로그램, CBD(CP Boot Daemon)은 베이스밴드 프로세서에 펌웨어 이미지를 로드하는 프로그램, RFS(Remote File System)은 모뎀 설정을 저장하고 모뎀으로부터 안드로이드 파일 시스템의 접근..
[하드웨어 해킹] QEMU 수정하기
여기서는 QEMU의 PANDA's 버전을 사용한다. CPU 추가 우선 아래 명령을 통해 panda를 clone한다. https://github.com/panda-re/panda/blob/dev/panda/docs/build_ubuntu.md sudo apt-get update # clone PANDA git clone https://github.com/panda-re/panda panda/target/arm/cpu.c 파일에서 1558번째 줄부터 이어지는 내용 중, cortex-r5와 cortex-a7 사이에 같은 내용으로 cortex-r7을 추가한다. static const ARMCPUInfo arm_cpus[] = { #if !defined(CONFIG_USER_ONLY) || !defined(TAR..
[하드웨어 해킹] CVE-2011-0531 재현하기(실패)
취약한 VLC 인스턴스 재현하기 비디오 파서는 길이, 비트레이트, 프레임레이트, 오디오와 비디오 포맷 등 다양한 파라미터가 있어서 오류가 발생하기 쉽다. 이러한 구성요소를 퍼징하면 취약점을 발견할 수 있을 것이다. CVE-2011-0531은 VLC video player의 원격 코드 실행할 수 있는 취약점이다. VLC를 다운로드 받는다. wget https://get.videolan.org/vlc/3.0.17.3/vlc-3.0.17.3.tar.xz tar xvf vlc-3.0.17.3.tar.xz cd vlc-3.0.17.3 modules/demux/mkv/mkv.hpp 파일의 MKV_IS_ID 매크로를 다음과 같이 수정한다. 취약점으로 인해 패치되기 전 코드이다. #define MKV_IS_ID( el..
[하드웨어 해킹] 퍼징 기술
퍼징은 2살짜리 아이에게 장난감이나 공구를 주는 것과 같다. 아이는 가능한 모든 방법으로 주어진 도구를 사용하려고 애쓴다. 퍼저는 여러 입력값을 넣어가며 프로그램을 깨부수고(break) 만다. 변이 기반 퍼징(Mutation-based fuzzing) 유전자 알고리즘(Genetic Algorithms, GAs)은 초기 입력을 주고 변형시키며 최적의 결과를 나타내는 값을 찾아내는 방법이다. 입력값이 더 나아질수록 코드 커버리지는 넓어진다. 원칙적으로 GA 구현과 입력값 생성은 AFL에 의해 자동화된다. 어떤 유전자가 살아남을 것인가를 판단하는 적합도 함수(Fitness Function)를 사용하는 대신 다른 함수(Novelty Function)을 사용해 입력값의 가짓수를 최대로 늘려 코드 커버리지를 향상시..