하드웨어해킹

    [하드웨어 해킹]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..

    [하드웨어 해킹] 퍼징 기술

    퍼징은 2살짜리 아이에게 장난감이나 공구를 주는 것과 같다. 아이는 가능한 모든 방법으로 주어진 도구를 사용하려고 애쓴다. 퍼저는 여러 입력값을 넣어가며 프로그램을 깨부수고(break) 만다. 변이 기반 퍼징(Mutation-based fuzzing) 유전자 알고리즘(Genetic Algorithms, GAs)은 초기 입력을 주고 변형시키며 최적의 결과를 나타내는 값을 찾아내는 방법이다. 입력값이 더 나아질수록 코드 커버리지는 넓어진다. 원칙적으로 GA 구현과 입력값 생성은 AFL에 의해 자동화된다. 어떤 유전자가 살아남을 것인가를 판단하는 적합도 함수(Fitness Function)를 사용하는 대신 다른 함수(Novelty Function)을 사용해 입력값의 가짓수를 최대로 늘려 코드 커버리지를 향상시..

    [하드웨어 해킹] 퍼징과 분석 기술 - 심볼릭 실행

    퍼징 퍼징(fuzzing)은 가장 효과적으로 소프트웨어를 테스트하는 기술이다. 정의에 따르면 퍼징은 실행 중인 소프트웨어뿐 아니라 소스코드와 컴파일된 코드에도 적용할 수 있다. 하지만 실행 중인 프로그램이 아니라면 정적 분석의 영역이라고 봐야할 것이다. 퍼징과 동적 분석, 정적 분석을 합쳐 concolic testing이라고 할 수 있다. concolic은 concrete와 symbolic을 합친 말로, symbolic한 실행과 concrete 실행을 함께 사용하는 기술을 말한다. 다시 말해 주어진 소스코드를 기반으로 높은 커버리지를 달성하는 테스트 케이스를 자동으로 생성하는 테스팅 기법이다. 프로그램 시맨틱을 해석하는 법 프로그램 시맨틱(semantic)은 어떤 요소를 어떠한 위치에 두면 어떤 의미를 ..

    [하드웨어 해킹] QEMU 실행 모드

    ARM 아키텍처를 사용하기 전 패키지 설치 sudo apt install build-essential sudo apt install gcc-arm-linux-gnueabihf sudo apt install libc6-armhf-cross sudo apt install gdb gdb-multiarch for MIPS ARM 아키텍처를 이용하는 경우 설치하지 않아도 괜찮다. sudo apt install gcc-mips-linux-gnu sudo apt install libc6-mips-cross 플러그인(peda, pwndbg, gef) git clone https://github.com/apogiatzis/gdb-peda-pwndbg-gef git clone 명령으로 파일을 받은 다음 해당 디렉토리로 들..

    [하드웨어 해킹] QEMU

    에뮬레이션으로 IOT 기기에 접근하기 얼마 전까지 에뮬레이션(emulation)은 교훈적(didactic) 목적이나 MAME(Multiple Arcade Machine Emulator)같은 비디오 게임 목적으로 사용되었다. 최근에는 풀 시스템(full system) 에뮬레이션을 통해 분석이나 취약점 연구 목적으로 사용된다. IoT와 임베디드 기기의 등장은 Avatar, Avatar2, PANDA 등의 툴 개발을 촉진했다. 파이썬 코드 기반인 덕에 새 프로젝트를 시작하고, 중단점을 제어하는 일련의 일을 매우 쉽게 해낼 수 있게 되었다. 사이버시큐리티에서 에뮬레이션을 도구로 활용하는 또다른 중요한 이유는 현대 프로그램이 난독화(obfuscation), 스톨링 코드(stalling code: 악성 코드의 실행..

    퍼징(fuzzing) 환경 구축하기

    "fuzzing against machine" 도서를 읽고 정리한 내용입니다. 퍼징의 기본 개념 QEMU(Quick Emulator)를 사용하는 이유는, 펌웨어를 가지고 에뮬레이팅하면 실제로 기기를 가지고 있지 않아도 테스트할 수 있기 때문이다. 플레이스테이션이나 닌텐도 등 비싼 기기를 보유하지 않아도 에뮬레이터를 통해 PC에서 동작할 수 있는 것처럼 말이다. 취약점에는 버퍼 오버플로우, 포맷 스트링 취약점, 힙 오버플로우 등이 있다. 이러한 취약점을 발견하는 과정은 매우 지루(tedious)한 과정이다. 그래서 퍼저(fuzzer)라는 툴을 이용한다. 퍼저는 프로그램을 실행하고, 다른 입력값(input)을 넣으면서 프로그램의 충돌(crash)을 관찰(monitoring)한다. 퍼징의 성과를 향상하기 위해..

    [하드웨어 해킹] iptime 공유기 펌웨어 가상화하기

    https://www.hackerschool.org/HardwareHacking/ Index of /HardwareHacking www.hackerschool.org 위에서 제공하는 "공유기 해킹 - ARM exploitation.pdf"을 보고 따라하다 오류가 발생했을 때 해결한 부분을 정리하려고 한다. 처음 시작했을 때 무엇을 목적으로 이걸 진행하고 있는지 몰라서 방향을 잡지 못했다. 우선 위 링크에서 어떤 내용을 진행하는지 간단하게 정리해보자. 100장까지 내용은 "기본 세팅을 진행하고, 펌웨어를 추출한 후 재조립해 가상화하기"라고 할 수 있다. 기본 세팅은 공유기 펌웨어 파일 다운로드 받기 크로스 컴파일러 설치 임베디드 리눅스 커널 zImage 추출 binwalk 설치 qemu 설치 등으로 이루어..