이번 스터디에서는 워게임을 풀기 전 워게임이 무엇이고 어떤 목적을 가지고 문제를 풀게 되는지 설명하는 시간을 갖는다. 앞으로 하게 될 스터디가 워게임 스터디인 만큼, 기본적으로 워게임이 무엇인지 알아야 한다.
워게임이란?
워게임은 의도적으로 취약점이 존재하도록 설계된 모의 해킹 환경이다. 제작자가 설계한 취약점을 찾아내고, 이해하고, 해결책을 찾아 결과적으로 '플래그'를 찾아내는 문제라고 할 수 있다. 해킹을 하기 위해서는 워게임부터 시작하는 것이 첫 발판이라 할 수 있다. 워게임 난이도가 다양하기 때문에 쉬운 문제부터 시작하는 것이 일반적이다. 출제자의 선택에 따라 퍼너블, 웹, 리버스 엔지니어링, 암호학, 포렌식, 네트워크 등과 같은 세부적 카테고리를 갖는다. 워게임을 조금이라도 쉽게 해결하기 위해서는 컴퓨터 과학에 대한 배경지식이 요구되기도 한다.
드림핵 워게임을 풀기 위한 준비물은 다음과 같다.
- Ubuntu Linux 환경
- nc (netcat)
나는 WSL2를 설치해 Ubantu Linux 환경을 만들었다.
(드림핵 강의 중 Virtual Machine을 참고함. 링크 - Virtual Machine | Dreamhack )
플래그란?
우리가 흔히 나가는 해킹 방어 대회의 일반적 형식은 CTF로, Cature The Flag의 줄임말이다. 여기서 Flag란, 공격 대상인 시스템에 존재하는 파일을 칭한다. 이것이 우리가 제출해야 하는 답안이다. 드림핵에서 사용하는 플래그는 보통 DH{} 형식의 중괄호 사이에 해시값이 들어있는 플래그를 사용한다. 이러한 플래그를 찾는 과정을 정리한 것을 라이트업(write-up)이라고 한다.
CTF란?
앞서 말했던 CTF에 대해 자세히 설명하겠다. CTF( Cature The Flag)란 공격 대상 시스템에 존재하는 파일(Flag)의 내용을 알아내고 답안으로 제출하여 푸는 대회이다. CTF와 워게임을 비교해 보았을 때 CTF는 워게임과 달리 정해진 시간 동안 가장 빠르게 많은 문제를 해결하는 것을 목표로 한다. 때문에 취약점을 빠르게 찾아 익스플로잇하는 연습이 가능하다.
CTF 특징은 다음과 같다.
- 다양한 규모의 CTF 존재
- 팀 구성으로 참가
- 팀원 제외 정답 공유 금지
전세계 CTF 일정과 팀 별 레이팅 등을 볼 수 있는 사이트 -> https://ctftime.org/
CTF 관련 자세한 설명이 기술된 문서 -> https://github.com/pwning/docs/blob/master/suggestions-for-running-a-ctf.markdown
컴퓨터 과학이란?
컴퓨터 과학(Computer Science)은 컴퓨터를 이용한 모든 작업과 그 기반 이론을 연구하는 학문이다. 컴퓨터 과학에 대한 지식 없이는 해킹을 효과적으로 수행할 수 없다. 따라서 드림핵 강의를 통해 컴퓨터 과학 기초를 배우고자 한다.
진법이란?
진법은 숫자, 혹은 문자를 사용해 수를 표현하는 체계를 말한다. n진법은 한 자릿수를 n가지의 숫자 혹은 문자로 나타낼 수 있다. 이 중 컴퓨터는 2진법을 사용한다. 컴퓨터에서 가장 기본적인 전기적 신호의 상태를 1과 0으로 표현한다. 이러한 조합으로 이루어진 비트가 모여 데이터를 표현한다. 2진수를 표현할 때는 0b라는 접두어를 붙인다. 이와 다르게 실생활에서 자연스럽게 사용하고 있는 체계가 10진법이다. 이외에도 16진법이 있는데 이는 2진수를 더 효율적으로 표현하기 위해 사용되는 진법 중 하나이다. 16진수는 디버깅 구도에서 메모리의 위치를 나타내는 주소값의 형태로 사용되기도 하며, RGB 색상을 표현할 때도 사용된다(4bit 단위로 정보를 끊어서 표현할 때 유용하기 때문).10진수, 2진수, 16진수를 표로 표현하자면 다음과 같다.
10진수 | 2진수 | 16진수 |
1
|
0001
|
1
|
2
|
0010
|
2
|
3
|
0011
|
3
|
4
|
0100
|
4
|
5
|
0101
|
5
|
6
|
0110
|
6
|
7
|
0111
|
7
|
8
|
1000
|
8
|
9
|
1001
|
9
|
10
|
1010
|
A
|
11
|
1011
|
B
|
12
|
1100
|
C
|
13
|
1101
|
D
|
14
|
1110
|
E
|
15
|
1111
|
F
|
16
|
10000
|
10
|
비트와 바이트란?
앞서 말했듯, 컴퓨터는 0과 1만으로 데이터를 표현하고 처리한다. 이때 0과 1을 나타내는 컴퓨터에서 사용하는 데이터의 최소 단위를 1비트라고 한다. 표현하고자 하는 정보의 종류에 따라 0과 1의 개수가 늘어나는 것이다.(비트 bit의 수) 8개의 비트로 구성된 더 큰 단위는 1 바이트(메모리에 저장되는 최소 단위)라고 한다. 1 바이트는 2^8=256가지의 수를 표현할 수 있다. 10진수로 0~255(2^8-1), 2진수로 00000000~11111111, 16진수로 00~FF까지 나타낸다. Bit, Byte, Word의 순으로 데이터 용량이 커진다. (1 Byte = 8 Bits, 2 Bytes = 16 Bits, 4 Bytes = 32 Bits)
최상위 비트와 최하위 비트란?
여러 개의 비트로 구성된 이진 데이터에서 가장 왼쪽에 있는 비트를 Most Significant Bit (MSB, 최상위 비트)라고 하고, 가장 오른쪽에 있는 비트를 Least Significant Bit (LSB, 최하위 비트)라고 부른다. 예를 들어 2진수 0b10010100의 MSB와 LSB를 표시하면 아래와 같다.
만약 데이터가 부호가 있다면 MSB는 부호의 의미를 갖는다. (0이면 양수, 1이면 음수)
- 부호를 갖는다 -> Signed 데이터 또는 부호가 있는 데이터
- 부호를 갖지 않는다(+만) -> unsigned 데이터 또는 부호가 없는 데이터
바이트 오더링이란?
각 바이트가 메모리에 정렬되는 방식을 바이트 오더링(Byte ordering)이라고 부른다. 바이트 오더링은 두 가지 방식으로 분류되는데, 빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian)이 있다.
- 빅 엔디안: 큰(왼쪽에 있는) 바이트부터 낮은 주소에 저장
- 네트워크 상에서 데이터를 전송할 때
- 대표적으로 SPARC CPU에서 빅 에디안 사용
드림핵 컴퓨터 과학 기초 - 비트와 바이트
- 리틀 엔디안: 작은(오른쪽에 있는) 바이트부터 낮은 주소에 저장
- 대표적으로 x86, x86-64 CPU에서 리틀 엔디안을 사용
드림핵 컴퓨터 과학 기초 - 비트와 바이트
드림핵 컴퓨터 과학 기초 - 비트와 바이트까지 정리하였다.
'워게임 스터디' 카테고리의 다른 글
[241104][SuNiNaTaS] level 1 (0) | 2024.11.04 |
---|---|
[241006][webhacking] old-01 (0) | 2024.10.06 |
[241006][webhacking] old-17 (0) | 2024.10.06 |
[241001][webhacking] old-14 (0) | 2024.10.01 |
[241001][webhacking] old-16 (0) | 2024.10.01 |