Recent posts

DEFCON 2023 Quals - kkkkklik

오래간만에 데프콘 CTF 온라인 예선에 참가했다. 문제가 정말 다양하게 나왔는데 ChatGPT를 활용한 문제도 있었고 Torque3D라는 게임엔진에 대한 문제도 있었다. 모든 문제는 깃헙에 소스코드가 공개돼있어 언제든 살펴볼 수 있다 (https://github.com/Nautilus-Institute/quals-2023).

내가 해결했던 kkkkklik은 윈도우즈 리버싱 문제인데, 바이너리 리버싱을 몇 년만에 해 보는지라 쉬운 문제임에도 하루 종일 걸렸지만 옛날 생각(?)이 나서 개인적으로 즐거웠다.

The click handler

kkkkklik.exe 프로그램을 구동하면 작은 창이 하나 뜨는데 특별히 입력창도 없고 클릭해도 반응이 없다. 그래서 바로 바이너리 분석을 시작했다.

GUI 프로그램이라서 main함수에서 따라가는 방식이 아니라 이벤트 핸들러를 발견하는 방식으로 분석해야 한다. 크고 작은 함수들 중에서 한 함수 안을 보면 수상하게 1337이라는 숫자가 있다. x32dbg에서 함수에 브레이크포인트를 걸어보면 GUI 창을 클릭했을 때 불리는 클릭 핸들러라는 점을 알 수 있다. 클릭 핸들러는 커다란 switch-case를 기준으로 세 부분으로 나뉘어있다.

klik_gui.png

Read more


Deleting Azure "dangling" role assignments

Azure 클라우드에서 dangling role assignment 가 200여개가 생겨있길래 지웠다.

청소하는 Azure CLI 스크립트는 다음과 같다.

az role assignment delete --verbose --ids $(az role assignment list --all | jq -r '.[] | if (.resourceGroup | length == 0) and (.principalName | length == 0) then .id else empty end')

Role Assignment

Azure 클라우드에서 RBAC (role based access control) 은 “role assignment” 라는 단위로 정의된다. 하나의 role assignment 는 다음으로 구성된다. 자세한 내용은 Azure Docs에 잘 나와있다.

  • assignee or principal (주체): 누구에게
  • scope (범위): 어디에서
  • role (역할): 무엇을 하도록 허용한다

azure-role-assignment.png

Read more


Docker Buildkit 으로 빌드 시간 단축하기

Docker의 multi-stage build와 buildkit을 이용하여 복잡한 빌드의 시간을 단축하는 방법.

이 방법을 사용하면 덤으로 멋있는 빌드 화면을 볼 수 있다.

Read more


Golang-like Defer in C++

한동안 Go와 C++을 오가며 프로그램을 짰는데, Go의 defer를 C++에 도입하면 편하겠다는 생각이 들어서 인터넷을 뒤져서 구현하는 법을 찾았다. 이런식으로 사용할 수 있다.

FILE* fp = fopen("hello.txt");
defer{ fclose(fp); };

스마트 포인터가 정석이라고들 하지만 defer 문법이 직관적이라는 생각에 현재 프로젝트에 사용하고 있다. 약간의 공부를 하면서 배운 다양한 리소스 해제 방법을 정리해두려고 한다.

  • Go Defer
  • C++ Smart Pointers
    • Pointer Ownership
    • Non-memory Resources
    • Interfacing with Regular Pointer Code
  • C++ Defer
    • ScopeGuard
    • Syntactic Sugar
  • Conclusion

Read more


CCE 2018 Quals - VNC

지난 주 사이버공격방어대회 (CCE 2018) 에 일반방어팀으로 참가하였다.

예선 1번 문제는 캡쳐한 VNC 원격데스크탑 패킷을 분석하여 정보를 알아내는 것이다.
암호화가 안 되어있어서 와이어샤크에서 내용이 그대로 보였다.

1. 키보드와 클립보드

제일 눈에 띄는 키보드 패킷만 골라보면 클라이언트가 _Y0u_g)t_VNC 를 입력했음을 알 수 있다.

vnc_key.png

그 다음 클립보드를 통해 _scr33n_Sh00t를 붙여넣기했음을 알 수 있다.

vnc_clip.png

둘 다 _ 로 시작하는 걸 보니 앞부분에 몇 글자가 더 있는 것 같다.
남은 부분은 화면상에 적혀있을 것이라고 짐작할 수 있다.

Read more