콘텐츠로 건너뛰기

실리콘 맥 환경에서 CTF 환경 구축

실리콘 맥에서는 아키텍처가 달라서 amd64 환경을 구축해서 디버깅하기 까다롭다.

qemu 기반으로한 colima라는 도커 런타임을 사용하는 방법이 있다.

colima 도커 런타임 구축

1. colima 설치

brew install docker
brew install colima
brew install docker-buildx

2. “x64”이름으로 64기가 디스크, 8코어, 4기가 램으로 qemu 기반 VM 설정해서 시작

colima start -p x64 -a x86_64 -c 8 -m 4 -d 64 --vm-type qemu

2-1. 제거

colima delete x64

2-2. 멈추기

colima stop x64

3. colima로 도커 런타임 변경됐는지 확인

docker context ls

4. AMD64 아키텍처의 Ubuntu 24버전 컨테이너 생성 및 실행, “ubutun22” 이름으로 생성

다음 컨테이너의 포트를 호스트의 포트로 포워딩

  • 컨테이너 포트 -> 호스트 포트 포워딩
  • 80 -> 8000
  • 1234 -> 12345
  • 8000 -> 18000
  • 8001 -> 18001
  • 8002 -> 18002
docker run -it --platform linux/amd64 \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=unconfined \
  -p 22222:22 -p 8000:80 -p 12345:1234 -p 18000:8000 -p 18001:8001 -p 18002:8002 \
  --name ubuntu22 ubuntu:22.04
  1. ubuntu22 컨테이너 시작/종료
docker start ubuntu22
docker stop ubuntu22
  1. 쉘 진입
docker exec -it ubuntu22 bash

samba 세팅

맥에서 윈도우 winscp 대신 역할하기 위해 세팅.

vscode에서 쉽게 코드 수정하기 위함.

1. samba 설치

sudo apt install -y samba

2. “ubuntu” 이름을 가진 samba 계정 생성

sudo smbpasswd -a ubuntu

3. samba 포트 수정 및 공유 폴더 지정

sudo nano /etc/samba/smb.conf

[내용]

[global]
smb ports = 8001

(...)

[ubuntu]
comment = samba shared directory
path = /home/ubuntu
read only = no
writable = yes
guest ok = no
valid user = ubuntu
create mask = 0777
directory mask = 0777

Dobby 후킹 프레임워크 설치/세팅

바이너리에서 어셈블리어 실행 중에 레지스터 후크할때 유용, 또한 다양한 OS 지원

1. git clone

git clone https://github.com/jmpews/Dobby.git

2. 옛날 버전으로 되돌리기

cd Dobby
git checkout d353eea7594d1ac85db84065aeb4d1300d9f3248

3. 소스코드 수정 (https://github.com/jmpews/Dobby/issues/202)

nano ~/Dobby/source/MemoryAllocator/NearMemoryAllocator.cc

MemBlock NearMemoryAllocator::allocateNearBlockFromUnusedRegion, MemBlock NearMemoryAllocator::allocateNearBlockFromUnusedRegion 함수에 있는 코드 수정.

min_valid_addr = pos - search_range;  // if pos < search_range, and min_valid_addr will be a large value,this maybe a bug
max_valid_addr = pos + search_range;

이 다음에

min_valid_addr = pos >= search_range ? (pos - search_range) : 0;

내용 추가

4. Dobby 빌드 / 설치

mkdir build_for_host && cd build_for_host
cmake ..
make -j8
sudo cp libdobby.so /usr/local/lib
sudo ldconfig
sudo cp ~/Dobby/include/dobby.h /usr/local/include

==============================================

기존 컨테이너 유지한채 추가 옵션을 넣어 반영하려면?

1. 기존 컨테이너를 이미지로 저장

docker commit ubuntu22 ubuntu22_2

2. 새로운 옵션을 알아서 잘…. 적용하여 새 컨테이너 실행

docker run -it --platform linux/amd64 \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=unconfined \
  -p 22222:22 -p 8000:80 -p 12345:1234 -p 18000:8000 -p 18001:8001 -p 18002:8002 \
  --name ubuntu22_2 ubuntu22_2
태그: