Security/System Hacking 8

Beginners: DH101 - 3 (코딩)

DreamHack의 Beginners 로드맵을 기반으로 정리한 글입니다.Visual Studio Code코딩(Coding)은 프로그래밍 언어를 작성함으로써 컴퓨터에게 명령할 수 있는 체계를 만드는 행위로, 해킹과 뗄 수 없는 관계이다. 그리고 이러한 코딩을 시작하기 위해선 소스 코드 편집기를 잘 사용할 수 있어야 한다. 비주얼 스튜디어 코드(Visual Studio Code, VS Code)는 Windows, macOS, Linux에서 사용 가능한 소스 코드 편집기이다. 기본적으로 JavaScript, TtypeScript, Node.js를 지원하며 확장 프로그램(Extension)을 통해 C, Java, Python 등 100개 이상의 언어를 지원한다. 가볍고 무료인데 다양한 기능을 제공하여 많은 사람..

Beginners: DH101 - 2 (리눅스 사용법)

DreamHack의 Beginners 로드맵을 기반으로 정리한 글입니다.셸(Shell)셸은 유저가 리눅스 시스템을 이용할 수 있는 인터페이스이다. 셸은 유저에게 입력을 받고 운영체제가 그것을 프로그램으로 처리하면 그 결과를 유저에게 출력한다.  Ubuntu를 기준으로 했을 때, 터미널을 실행하면 bash 셸이 자동으로 실행된다. 셸 프롬프트(Shell Prompt)user@user-VirtualBox:~$ 이것을 셸 프롬프트라고 부른다. 유저는 셸 프롬프트를 보고 셸이 명령어를 입력 받을 준비가 되었음을 알 수 있다. user@user-VirtualBox:~$ iduid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(di..

Beginners: DH101 - 1 (컴퓨터 과학 기초)

DreamHack의 Beginners 로드맵을 기반으로 정리한 글입니다.진법진법은 임의의 숫자 혹은 문자를 사용하여 수를 표현하는 체계를 말한다. n진법은 한 자릿수를 n가지(0 ~ n-1)의 숫자 혹은 문자로 나타낼 수 있다. 10진법, 2진법, 16진법으로 나타낸 수는 각각 10진수(decimal), 2진수(binary), 16진수(hexadecimal)라고 한다. 10진법: 10개(0 ~ 9)의 숫자로 수를 표현실생활에서는 손가락 10개로 숫자를 세고, 각 자릿수를 0 ~ 9까지의 수로 나타낸다. 사람들이 자연스럽게 사용하고 있는 수 체계가 바로 10진법이다. 2진법: 2개(0, 1)의 숫자로 수를 표현컴퓨터는 사람과 다르게 10진법이 아닌 2진법을 사용한다. 흔히 컴퓨터를 두고 '0과 1로 이루어..

System Hacking: Shellcode - 2

DreamHack의 System Hacking 로드맵을 기반으로 정리한 글입니다.Exploit Tech: 2. execve Shellcode▶ 리눅스 계층 셸(Shell, 껍질)이란 운영체제에 명령을 내리기 위해 사용되는 인터페이스로, 운영체제의 핵심 기능을 하는 프로그램을 커널(Kernel, 호두 속 내용물)이라고 하는 것과 대비된다. 셸을 획득하면 시스템을 제어할 수 있게 되므로 통상적으로 셸 획득을 시스템 해킹의 성공으로 여긴다. execve 셸코드는 임의의 프로그램을 실행하는 셸코드인데, 이를 이용하면 서버의 셸을 획득할 수 있다. 또한, 다른 언급없이 셸코드라고 하면 이를 의미하는 경우가 많다. 최신의 리눅스는 대부분 sh, bash를 기본 셸 프로그램으로 탑재하고 있으며, 이 외에도 zsh, ..

System Hacking: Shellcode - 1

DreamHack의 System Hacking 로드맵을 기반으로 정리한 글입니다.Exploit Tech: 1. orw Shellcode해킹 분야에서 상대 시스템을 공격하는 것을 익스플로잇(Exploit)이라고 부른다. 익스플로잇은 '부당하게 이용하다'라는 뜻이 있는데, 상대 시스템에 침투하여 시스템을 악용하는 해킹과 맥락이 닿는다. 셸코드(Shellcode)는 시스템 해킹의 익스플로잇과 관련된 공격 기법 중 하나로, 익스플로잇을 위해 제작된 어셈블리 코드 조각을 일컫는다. 일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용해서, 특별히 '셸'이 접두사로 붙었다. 셸을 획득하는 것은 시스템 해킹의 관점에서 매우 중요하다. 만약 해커가 rip를 자신이 작성한 셸코드로 옮길 수 있으면 해커는 원하는 어셈블리..

System Hacking: Tool Installation - 2

DreamHack의 System Hacking 로드맵을 기반으로 정리한 글입니다.Tool: pwntools파이썬으로 여러 개의 익스플로잇(취약점 공격) 스크립트를 작성하다 보면, 자주 사용하게 되는 함수들이 있다. 예를 들어 정수를 리틀 엔디언의 바이트 배열로 바꾸는 패킹 함수, 또는 그 역을 수행하는 언패킹 함수 등은 익스플로잇 과정에 거의 항상 필요하다. ※ 리틀 엔디언: 데이터를 메모리에 저장하거나 전송할 때, 값의 하위 바이트(작은 값의 바이트)를 먼저 저장하는 방식이다. 이런 함수들을 반복적으로 구현하는 것은 비효율적이다. 그래서 시스템 해커들은 이들을 집대성하여 pwntools라는 파이썬 모듈을 제작하였다. pwntools 덕분에 익스플로잇 제작은 전과 비교할 수 없을 정도로 간단하고, 쉬워졌..

System Hacking: Tool Installation - 1

DreamHack의 System Hacking 로드맵을 기반으로 정리한 글입니다.Tool: gdb디버거프로그램을 개발할 때는 일반적으로 코드의 논리구조를 신중하게 설계하고, 코드를 작성해 나간다. 그런데 개발 초기에 아무리 신중하게 설계해도, 코드의 규모가 커지다 보면 실수가 발생하기 마련이다. 컴퓨터 과학에서는 이렇게 실수로 발생한 프로그램의 결함을 버그(bug)라고 한다. 개발자들은 농담처럼 개발에 투자한 시간만큼을 버그를 잡는 데 사용한다고 말한다. 그 정도로 이미 완성된 코드에서 버그를 찾는 것은 어렵다. 그래서 이런 어려움을 해소하고자 디버거(Debugger)라는 도구가 개발되었다. 디버거는 문자 그대로 버그를 없애기 위해 사용하는 도구이다. 프로그램을 어셈블리 코드 단위로 실행하면서, 실행 결..

System Hacking: Background - Computer Science

DreamHack의 System Hacking 로드맵을 기반으로 정리한 글입니다.Computer Architecture폰 노이만 구조폰 노이만은 컴퓨터에 연산, 제어, 저장의 세 가지 핵심 기능이 필요하다고 생각했다.근대의 컴퓨터는 연산과 제어를 위해 중앙처리장치(Central Processing Unit, CPU)를, 저장을 위해 기억장치(memory)를 사용한다. 그리고 장치 간에 데이터나 제어 신호를 교환할 수 있도록 버스(bus)라는 전자 통로를 사용한다.▶ 폰 노이만 구조 중앙처리장치CPU는 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌이다.프로세스의 코드를 불러오고, 실행하고, 결과를 저장하는 일련의 모든 과정이 CPU에서 일어난다.CPU는 산술/논리 연산을 처리하는 산술논리장치(..