전체 글

전체 글

    [번역] A Look at AFL++ Under The Hood

    https://blog.ritsec.club/posts/afl-under-hood/ AFL++의 동작 과정을 자세히 분석한 위 글을 DeepL을 이용해 번역한 내용입니다. 일부 source, '여기'에 해당하는 링크는 누락되었을 수 있습니다. AFL++와 Coverage-Based Fuzzing은 무엇입니까? AFL은 무작위 입력 퍼저가 아닙니다. AFL은 커버리지 기반 퍼징이라는 것을 수행합니다. 커버리지 기반 퍼징의 기본 개념은 바이너리에서 어떤 영역이 실행되고 있는지 또는 커버리지가 있는지 추적하는 것입니다. 이 정보를 추적함으로써 어떤 입력이 코드의 어떤 부분을 실행하는지 파악할 수 있습니다. 이를 통해 코드베이스의 작은 하위 집합뿐만 아니라 전체 코드베이스를 포괄하는 입력 데이터베이스를 개발할 ..

    생성형 AI 이해를 바탕으로 한 프롬프트 엔지니어링 기법

    생성형 AI 이해 - 어텐션 프롬프트는 컴퓨터가 사용자에게 보여주는 문구로, 이에 따라 프롬프트 엔지니어링은 좋은 질문을 던지는 것이 아니라, 좋은 답변을 받기 위한 모든 기법을 말한다. 방법이야 어떻게 되는 간에, 결론만 잘 나오면 된다. LLM은 어텐션(attention) 기반이다. 어텐션은 문제를 풀기 위해 영어 지문을 이리저리 오가며 독해하는 것과 같다. 뒷부분을 읽다가도 앞부분과 붙이고 중요한 부분은 동그라미 치는 과정이라 볼 수 있다. 이런 방법으로 짧은 시간에 엄청난 정보를 정리해 제공할 수 있다. GPT가 내용을 다 기억할 수 있는 것도 어텐션 덕분에 대화를 훑어볼 수 있기 때문이다. 우리 뇌가 필요한 정보만 저장하고, 이 정보를 잘 가공해 꺼내듯이 AI도 인코딩과 디코딩을 거친다. 인코딩..

    펌웨어 에뮬레이팅 후 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)을 사용해 입력값의 가짓수를 최대로 늘려 코드 커버리지를 향상시..