**์ ์ ํต์ฌ ๋ช ์ **: ํดํน์ ์ ์ฝ์ ์ฐฝ์์ ์ผ๋ก ๊ทน๋ณตํ๋ ์์ ์ด๋ค. ์์คํ ์ ์ดํดํ๊ณ ํ์ฉ๋ ๊ฒ ์ด์์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ํ์ โ ๋ ผ๋ฆฌ๊ฐ ์์ ํ์์ด ๋๋ ์ธ๊ณ.
์ด ๋งํฌ๋ฅผ ํตํด ๊ตฌ๋งคํ๋ฉด ์ด์์์๊ฒ ์์ ์ ์์๋ฃ๊ฐ ์ง๊ธ๋ ์ ์์ต๋๋ค.
YES24์์ ๊ตฌ๋งคํ๊ธฐHacking: The Art of Exploitation, 2nd Ed. โ Jon Erickson (No Starch Press, 2008)
์ ์ ํต์ฌ ๋ช ์ : ํดํน์ ์ ์ฝ์ ์ฐฝ์์ ์ผ๋ก ๊ทน๋ณตํ๋ ์์ ์ด๋ค. ์์คํ ์ ์ดํดํ๊ณ ํ์ฉ๋ ๊ฒ ์ด์์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ํ์ โ ๋ ผ๋ฆฌ๊ฐ ์์ ํ์์ด ๋๋ ์ธ๊ณ.
- ์ถํ: No Starch Press, 2008 / ISBN: 978-1-59327-144-2
- ๊ตฌ์ฑ: 7๊ฐ ์ฑํฐ (0x100~0x700), LiveCD ํฌํจ
- ํฌ์ปค์ค: ์ด๋ก + ์ง์ ์ฝ๋๋ก ์๋ ์๋ฆฌ๋ฅผ ์ฆ๋ช โ "๊ธฐ๋ฒ์ ์ฐ๋ ๋ฒ"์ด ์๋๋ผ "์ ์๋ํ๋๊ฐ"
์ฑํฐ ๊ตฌ์ฑ ๊ฐ์
| ์ฑํฐ | ์ ๋ชฉ | ํต์ฌ ์ฃผ์ |
|---|---|---|
| 0x100 | Introduction | ํด์ปค ์ค๋ฆฌ, ํด์ปค vs ํฌ๋์ปค vs ์คํฌ๋ฆฝํธ ํค๋ |
| 0x200 | Programming | C, x86 ์ด์ ๋ธ๋ฆฌ, GDB, ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ |
| 0x300 | Exploitation | ๋ฒํผ ์ค๋ฒํ๋ก์ฐ, ํฌ๋งท ์คํธ๋ง, ํยทBSS ์ค๋ฒํ๋ก์ฐ |
| 0x400 | Networking | raw ์์ผ, TCP/IP, DoS, TCP ํ์ด์ฌํน |
| 0x500 | Shellcode | x86 ์ ธ์ฝ๋ ์์ฑ, ํฌํธ ๋ฐ์ธ๋ฉ, null-byte ํํผ |
| 0x600 | Countermeasures | ASLR, ์คํ ์นด๋๋ฆฌ, NX, ์ฐํ ๊ธฐ๋ฒ |
| 0x700 | Cryptology | ๋์นญ/๋น๋์นญ ์ํธ, RSA, ์์ ์ปดํจํ ํจ์ |
0x100: ์๋ก โ ํด์ปค ์ค๋ฆฌ์ ์ ์
ํต์ฌ ๊ฐ๋
ํด์ปค ์ค๋ฆฌ (Hacker Ethic):
- ์ ๋ณด์ ์์ ๋ก์ด ํ๋ฆ์ ๋ฏฟ์
- ์์คํ ํ๊ตฌ ์์ฒด์ ๊ฐ์น๋ฅผ ๋
- ๋ ผ๋ฆฌ๋ฅผ ์์ ํ์์ผ๋ก ๋ด
์ธ ๊ฐ์ง ๊ตฌ๋ถ:
| ์ฉ์ด | ์๋ฏธ |
|---|---|
| ํด์ปค(Hacker) | ์์คํ ์ดํด์ ์ฐฝ์์ ๋ฌธ์ ํด๊ฒฐ. ๋ฐ๋์ ์ ์์ ์ด์ง ์์ |
| ํฌ๋์ปค(Cracker) | ์ ์์ ๋ชฉ์ ์ผ๋ก ์์คํ ์ ์นจ์ ํ๋ ์ฌ๋ |
| ์คํฌ๋ฆฝํธ ํค๋(Script Kiddie) | ์ดํด ์์ด ๋จ์ ๋๊ตฌ๋ง ์ฌ์ฉ |
๊ณต์งํ ๋ชจ๋ธ (Co-evolutionary Model):
- ๋ณด์์ ๊ตฐ๋น ๊ฒฝ์ โ ๊ณต๊ฒฉ์๊ฐ ๋ฐฉ์ด๋ฅผ ๊ฐ์ ํ๊ณ , ๋ฐฉ์ด์๊ฐ ๊ณต๊ฒฉ์ ์ ํํจ
- "๋ฐฉ์ด๋ ๊ณต๊ฒฉ์ ์ดํดํด์ผ ํ๋ค"๋ ์ฑ ์ ๊ทผ๋ณธ ์ ์
0x200: ํ๋ก๊ทธ๋๋ฐ โ ์ต์คํ๋ก์์ ํ ๋
x86 ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ:
๋ฎ์ ์ฃผ์ โโโโโโโโโโโโโโโโโโโโโ ๋์ ์ฃผ์
[ํ
์คํธ] [๋ฐ์ดํฐ] [BSS] [ํโ] [โ์คํ]
| ์ธ๊ทธ๋จผํธ | ๋ด์ฉ |
|---|---|
| ํ ์คํธ(Text) | ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ ์ฝ๋ |
| ๋ฐ์ดํฐ(Data) | ์ด๊ธฐํ๋ ์ ์ ๋ณ์ |
| BSS | ์ด๊ธฐํ๋์ง ์์ ์ ์ ๋ณ์ |
| ํ(Heap) | malloc() ๋ฑ ๋์ ํ ๋น. ๋ฎโ๋ ๋ฐฉํฅ์ผ๋ก ์ฑ์ฅ |
| ์คํ(Stack) | ์ง์ญ ๋ณ์ยท๋ฆฌํด ์ฃผ์. ๋โ๋ฎ ๋ฐฉํฅ์ผ๋ก ์ฑ์ฅ |
ํต์ฌ ๋ ์ง์คํฐ (x86):
| ๋ ์ง์คํฐ | ์ญํ |
|---|---|
| EIP | ๋ช ๋ น ํฌ์ธํฐ โ ๋ค์ ์คํํ ๋ช ๋ น์ ์ฃผ์ |
| EBP | ํ๋ ์ ๋ฒ ์ด์ค ํฌ์ธํฐ โ ํ์ฌ ์คํ ํ๋ ์ ๊ธฐ์ค์ |
| ESP | ์คํ ํฌ์ธํฐ โ ์คํ ์ต์๋จ ๊ฐ๋ฆฌํด |
๋ฆฌํ-์๋์ธ ๋ฐ์ดํธ ์์: x86์ ๊ฐ์ฅ ๋ฎ์ ๋ฐ์ดํธ๊ฐ ๋ฎ์ ์ฃผ์์ ์ ์ฅ. 0x12345678 โ ๋ฉ๋ชจ๋ฆฌ์ 78 56 34 12 ์์.
์คํ ํ๋ ์ ๊ตฌ์กฐ
ํจ์ ํธ์ถ ์ ์คํ์ ์์ด๋ ์์:
๋์ ์ฃผ์
[ํจ์ ์ธ์]
[๋ฆฌํด ์ฃผ์ (EIP ์ ์ฅ๊ฐ)]
[์ ์ฅ๋ ํ๋ ์ ํฌ์ธํฐ (SFP)]
[์ง์ญ ๋ณ์ ...]
๋ฎ์ ์ฃผ์ โ ESP๊ฐ ๊ฐ๋ฆฌํด
ํจ์ ํ๋กค๋ก๊ทธ/์ํ๋ก๊ทธ:
- ํ๋กค๋ก๊ทธ:
push ebpโmov ebp, espโsub esp, N - ์ํ๋ก๊ทธ:
mov esp, ebpโpop ebpโret
GDB ๋๋ฒ๊น ๊ธฐ๋ฒ
gdb ./ํ๋ก๊ทธ๋จ
(gdb) break main # ๋ธ๋ ์ดํฌํฌ์ธํธ ์ค์
(gdb) run # ์คํ
(gdb) info registers # ๋ ์ง์คํฐ ํ์ธ
(gdb) x/24x $esp # ์คํ ๋ฉ๋ชจ๋ฆฌ ๋คํ (24 DWORD hex)
(gdb) disassemble main # ์ด์
๋ธ๋ฆฌ ์ญ์ด์
๋ธ
(gdb) set disassembly-flavor intel # Intel ๋ฌธ๋ฒ
0x300: ์ต์คํ๋ก์ โ ์ทจ์ฝ์ ๊ณต๊ฒฉ
๋ฒํผ ์ค๋ฒํ๋ก์ฐ (Stack-based)
์๋ฆฌ: ์คํ์์ ๋ฒํผ ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ฐ๋ฉด ์ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฎ์ด์.
ํต์ฌ ์์ โ auth_overflow.c:
์คํ ๊ตฌ์กฐ:
[password_buffer 16๋ฐ์ดํธ] [padding] [auth_flag]
โ 28๋ฐ์ดํธ ์คํ์
- 30๊ฐ์ 'A' ์ ๋ ฅ โ auth_flag๊ฐ 0x00004141(=16705)๋ก ๋ณ์กฐ โ ์ธ์ฆ ์ฐํ
- EIP๋ฅผ ๋ฎ์ด์ฐ๋ฉด ์์ ์ฝ๋ ์คํ ๊ฐ๋ฅ
EIP ์ ์ด ๊ณผ์ :
- ๋ฒํผ โ SFP โ ๋ฆฌํด ์ฃผ์ ์์๋ก ๋ฎ์ด์
- ๋ฆฌํด ์ฃผ์์ ์ ธ์ฝ๋ ์ฃผ์ ์ฝ์
- NOP ์ฌ๋ ๋(0x90)๋ก ์ฃผ์ ์ ๋ฐ๋ ์ํ
ํ ์ค๋ฒํ๋ก์ฐ (Heap-based)
์์ โ notetaker.c:
- malloc()์ผ๋ก ๋ ธํธ ํ์ผ๋ช ๊ณผ ๋ด์ฉ์ ํ์ ํ ๋น
- ์ฌ๋ณผ๋ฆญ ๋งํฌ ํธ๋ฆญ: ๋
ธํธ ํ์ผ โ
/etc/passwd๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํจ - ์ค๋ฒํ๋ก์ฐ๋ก ํ์ผ๋ช ํฌ์ธํฐ๋ฅผ ๋ฎ์ด์ โ root ๊ถํ ํ์ผ ์ฐ๊ธฐ
BSS ์ธ๊ทธ๋จผํธ ์ค๋ฒํ๋ก์ฐ
์์ โ game_of_chance.c:
static char name[100]; // BSS์ ์์น
static void (*current_game)(); // ํจ์ ํฌ์ธํฐ (name 100๋ฐ์ดํธ ๋ค)
- name ๋ฒํผ๋ฅผ 100๋ฐ์ดํธ ์ด์ ์ฑ์ฐ๋ฉด
current_gameํจ์ ํฌ์ธํฐ ๋ฎ์ด์ - 0x42424242 ์ฃผ์๋ก ์ ํ โ
BBBB์คํ
ํฌ๋งท ์คํธ๋ง ์ทจ์ฝ์
์์ธ: printf(user_input) โ ํฌ๋งท ๋ฌธ์์ด์ ์ฌ์ฉ์๊ฐ ์ ์ด.
์ฃผ์ ๊ณต๊ฒฉ ๋ฒกํฐ:
| ํฌ๋งท | ํจ๊ณผ |
|---|---|
%x | ์คํ ๊ฐ 16์ง์ ์ถ๋ ฅ โ ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ ๋ ธ์ถ |
%s | ์คํ์ ์ฃผ์๋ฅผ ํฌ์ธํฐ๋ก ํด์, ๋ฌธ์์ด ์ฝ๊ธฐ โ ์์ ์ฃผ์ ์ฝ๊ธฐ |
%n | ์ง๊ธ๊น์ง ์ถ๋ ฅํ ๋ฐ์ดํธ ์๋ฅผ ์คํ ์ฃผ์์ ์ โ ์์ ์ฃผ์ ์ฐ๊ธฐ |
์์ ์ฃผ์ ์ฐ๊ธฐ ๊ธฐ๋ฒ:
- ํฌ๋งท ๋ฌธ์์ด ์์ ๋ชฉํ ์ฃผ์๋ฅผ 4๋ฐ์ดํธ์ฉ ์ฝ์ (4๊ฐ ์ฃผ์: addr, addr+1, addr+2, addr+3)
- field-width ์ต์
(
%NNx)์ผ๋ก ์ถ๋ ฅ ๋ฐ์ดํธ ์ ์กฐ์ โ%n์ด ์ฐ๋ ๊ฐ ์ ์ด - ๊ฐ ๋ฐ์ดํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ฎ์ด์ฐ๋ฉด ์์ 32๋นํธ ๊ฐ์ ์์ ์ฃผ์์ ์ธ ์ ์์
๊ฒฐ๊ณผ: 4ํ %n ์ฐ๊ธฐ๋ก 0xDDCCBBAA๋ฅผ address์ ๊ธฐ๋ก
0x400: ๋คํธ์ํน โ ํ๋กํ ์ฝ ์ดํด์ ๊ณต๊ฒฉ
raw ์์ผ ํ๋ก๊ทธ๋๋ฐ
socket(PF_INET, SOCK_STREAM, 0)โ TCP ์์ผ ์์ฑlibpcap: ํจํท ์บก์ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌlibnet: ํจํท ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ- BPF (Berkeley Packet Filter): ์ปค๋ ์์ค ํจํท ํํฐ ("dst host x.x.x.x and tcp[tcpflags] & tcp-ack != 0")
DoS ๊ณต๊ฒฉ ์ ํ
| ๊ณต๊ฒฉ | ๋ฉ์ปค๋์ฆ | ํ์ฌ ์ ํจ์ฑ |
|---|---|---|
| SYN ํ๋ฌ๋ | ๋๋ค IP๋ก SYN ํจํท ๋ฒ๋ โ ์ฐ๊ฒฐ ํ ์ด๋ธ ์์ง | syncookies๋ก ๋ฐฉ์ด |
| Ping of Death | 65,536๋ฐ์ดํธ ์ด๊ณผ ICMP ํจํท โ ํฌ๋์ | ๊ตฌํ OS์๋ง ์ ํจ |
| Teardrop | ๊ฒน์น๋ ์คํ์ ์ IP ๋จํธ โ ์ฌ์กฐ๋ฆฝ ํฌ๋์ | ํจ์น๋จ. ๊ฐ๋ ์ ๋ฐ๋ณต |
| Smurf/Fraggle | ๋ธ๋ก๋์บ์คํธ ์ฆํญ (ICMP/UDP echo) | ISP ํํฐ๋ง์ผ๋ก ๊ฐ์ |
| DDoS/๋ด๋ท | ๊ฐ์ผ ํธ์คํธ๋ค์ ๋์ ํ๋ฌ๋ | ํ์ฌ๋ ์ฃผ์ ์ํ |
TCP/IP ํ์ด์ฌํน
- ์กฐ๊ฑด: ๊ณต๊ฒฉ์๊ฐ ํผํด์์ ๊ฐ์ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ
- ๋ฐฉ๋ฒ: libpcap์ผ๋ก ์ค๋ํ โ ์ํ์ค ๋ฒํธ ํ๋ณด โ ํผํด์ IP ์์ฅ ํจํท ์ ์ก
- RST ํ์ด์ฌํน: ์ฌ๋ฐ๋ฅธ ACK ๋ฒํธ๋ก RST ํจํท ์์ฅ ์ ์ก โ ์ฐ๊ฒฐ ๊ฐ์ ์ข ๋ฃ
0x500: ์ ธ์ฝ๋ โ ๊ธฐ๊ณ์ด ์์ค ํ์ด๋ก๋
execve("/bin/sh") ์ ธ์ฝ๋
push BYTE 11 ; sys_execve = 11
pop eax
push ecx ; null terminator
push 0x68732f2f ; "//sh"
push 0x6e69622f ; "/bin"
mov ebx, esp ; ebx = "/bin//sh"
push ecx ; null for envp
mov edx, esp
push ebx ; argv[0]
mov ecx, esp
int 0x80 ; execve("/bin//sh", ["/bin//sh", NULL], [NULL])
ํต์ฌ ์์น:
- null ๋ฐ์ดํธ(0x00) ํํผ โ ๋ฌธ์์ด ๋ณต์ฌ ํจ์๊ฐ null์์ ์ค๋จํ๊ธฐ ๋๋ฌธ
xor eax, eax๋์push 0; pop eax๋ฑ์ผ๋ก null ์์ด ๋ ์ง์คํฐ ์ด๊ธฐํ
ํฌํธ ๋ฐ์ธ๋ฉ ์ ธ์ฝ๋
sockfd = socket(PF_INET, SOCK_STREAM, 0); // socketcall(SYS_SOCKET, args)
bind(sockfd, &addr, sizeof(addr)); // socketcall(SYS_BIND, args)
listen(sockfd, 4);
accept(sockfd, ...);
dup2(new_fd, 0/1/2); // stdin/stdout/stderr ๋ฆฌ๋ค์ด๋ ํธ
execve("/bin/sh", ...);
- Linux syscall
socketcall(#102): ๋ชจ๋ ์์ผ ํจ์๋ฅผ ๋จ์ผ ์ง์ ์ ์ผ๋ก ์ฒ๋ฆฌ - ํฌํธ 31337 ๋ฐ์ธ๋ฉ โ ์๊ฒฉ ์ฐ๊ฒฐ ์ ์ ธ ํ๋
ํด๋ฆฌ๋ชจํฝ ํ๋ฆฐํฐ๋ธ ASCII ์ ธ์ฝ๋
๋ฐฐ๊ฒฝ: ์ ๋ ฅ ๊ฒ์ฆ์ด ํ๋ฆฐํฐ๋ธ ๋ฌธ์(0x20~0x7e)๋ง ํ์ฉํ ๋.
ํต์ฌ ๊ธฐ๋ฒ:
and eax, 0x41414141โ%AAAA(ํ๋ฆฐํฐ๋ธ ๊ธฐ๊ณ์ด)- AND ์ฐ์ฐ์ผ๋ก ๋ ์ง์คํฐ 0 ์ด๊ธฐํ: ๋ ์ญ ๊ฐ AND โ ๋ชจ๋ 0
sub eax, value๋ก ๋ชฉํ ๊ฐ์ ์ํ ๋บ์ ์ผ๋ก ๊ตฌ์ฑpush/pop(PยทXยทTยท\)์ผ๋ก ๋ ์ง์คํฐ ๊ฐ ์ด๋
TX-3399-Purr-!TTT-P\ โ ESP์ 860 ๋ํ๊ธฐ (ํ๋ฆฐํฐ๋ธ ASCII๋ง ์ฌ์ฉ)
- ๋ก๋ ์ฝ๋๊ฐ ์คํ์ ์ค์ ์ ธ์ฝ๋๋ฅผ ๋ค์์ ์์ผ๋ก ์กฐ๋ฆฝ โ EIP๊ฐ ๋๋ฌ
0x600: ์นด์ดํฐ๋ฉ์ โ ๋ฐฉ์ด์ ์ฐํ
์ฃผ์ ๋ณดํธ ๊ธฐ๋ฒ
| ๋ณดํธ ๊ธฐ๋ฒ | ์๋ฆฌ | ์ฐํ ๋ฐฉ๋ฒ |
|---|---|---|
| ASLR | ์คํยทํยท๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฃผ์ ๋ฌด์์ํ | linux-gate ๊ธฐ๋ฒ, return-to-libc, ๋ธ๋ฃจํธํฌ์ค |
| ์คํ ์นด๋๋ฆฌ | ๋ฆฌํด ์ฃผ์ ์์ ๊ฒ์ฆ๊ฐ ์ฝ์ | ์นด๋๋ฆฌ ๊ฐ ์ ์ถ ํ ๋ฎ์ด์ฐ๊ธฐ |
| NX bit | ์คํ/ํ ์คํ ๋ถ๊ฐ | Return-to-libc (์ฝ๋ ์ฌ์ฌ์ฉ) |
ASLR ์ฐํ โ linux-gate ๋ฐ์ด์ค
linux-gate.so.1: ์ปค๋์ด ๋ชจ๋ ํ๋ก์ธ์ค์ ๊ฐ์ ์ฃผ์(0xffffe000)๋ก ๋ ธ์ถํ๋ ๊ฐ์ ๊ณต์ ๊ฐ์ฒด- ASLR์ด ์ผ์ ธ๋ linux-gate๋ ํญ์ ๊ณ ์ ์ฃผ์
jmp esp(0xff 0xe4) ๋ช ๋ น์ด 0xffffe777์ ์กด์ฌ- exploit: ๋ฆฌํด ์ฃผ์๋ฅผ 0xffffe777๋ก ๋ฎ์ด์ โ
jmp esp์คํ โ ESP๊ฐ ๊ฐ๋ฆฌํค๋ ์ ธ์ฝ๋๋ก ์ ํ
EIP ์ ์ด โ linux-gate์ jmp esp โ ESP์ ๋ฏธ๋ฆฌ ์์๋ ์
ธ์ฝ๋ ์คํ
(์ด ๊ธฐ๋ฒ์ Linux kernel 2.6.18๋ถํฐ ํจ์น๋จ)
ํด๋ฆฌ๋ชจํฝ ์ธ์ฝ๋ฉ ์ ธ์ฝ๋
- ์ ๋ ฅ ๊ฒ์ฆ์ ํต๊ณผํ๋ ์ธ์ฝ๋ + ๋ฐํ์ ๋์ฝ๋ ์กฐํฉ
- ๋์ฝ๋๋ ์์ ์ด ์คํ๋๋ฉด์ ์ค์ ์ ธ์ฝ๋๋ฅผ ๋ณตํธํยท์คํ
0x700: ์ํธํ
๋์นญ ์ํธ
- ๋์ผํ ํค๋ก ์ํธํยท๋ณตํธํ
- DES: 56๋นํธ ํค, Feistel ๋คํธ์ํฌ ๊ตฌ์กฐ (LยทR ์ ๋ฐ์ ๊ต์ฐจ ์นํยทํผํฉ)
- 40๋นํธ ํค์ ์ทจ์ฝ์ฑ: RSA Data Security ์ฑ๋ฆฐ์ง โ Ian Goldberg(UC Berkeley)๊ฐ 3.5์๊ฐ ๋ง์ ํด๋
- ํ๋ ํ์ค: AES-256 (์์ ์ปดํจํฐ ๊ณต๊ฒฉ์๋ ํค ํฌ๊ธฐ ๋ ๋ฐฐ ์ฌ์ )
์์ ์ปดํจํ ๊ณผ ๋ธ๋ก ์ํธ:
- ๊ทธ๋ก๋ฒ ์๊ณ ๋ฆฌ์ฆ: ์์ ์ปดํจํฐ๋ก ๋ธ๋ฃจํธํฌ์ค ๊ณต๊ฒฉ ์ ํจ๊ณผ์ ํค ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์
- ๋์: ํค ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ(์: 256๋นํธ)๋ก ๋๋ฆฌ๋ฉด ์ถฉ๋ถ
๋น๋์นญ ์ํธ โ RSA
ํต์ฌ ์ํ:
P, Q = ๋ ์์ N = P ร Q (๊ณต๊ฐ)
ฯ(N) = (P-1)(Q-1)
E: ฯ(N)๊ณผ ์๋ก์์ธ ๊ณต๊ฐ ์ง์ (๊ณต๊ฐ)
D = E^(-1) mod ฯ(N) โ ๊ฐ์ธํค (๋น๋ฐ)
์ํธํ: C = M^E mod N
๋ณตํธํ: M = C^D mod N
๋ณด์ ๊ทผ๊ฑฐ: N์ ์์ธ์๋ถํดํ๋ฉด P, Q โ ฯ(N) โ D๋ฅผ ๊ณ์ฐ ๊ฐ๋ฅ โ ๊ทธ๋ฌ๋ ๋ํ N์ ์์ธ์๋ถํด๋ ํ์ฌ ๋ถ๊ฐ๋ฅ.
- ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ: ์์ฒด ์ฌ์ (Number Field Sieve, NFS) โ ์ค์ง์ ์๊ฐ
- 2048๋นํธ RSA๋ ํ์ฌ ์์
ํต์ฌ ์ธ์ฌ์ดํธ
์์ ์ ๊ด์ ์์ ์ค์ํ ๊ฒ
- ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ๋ชจ๋ ์ต์คํ๋ก์์ ๊ธฐ์ด โ EIP ์ ์ด = ์ฝ๋ ์คํ ์ ์ด. ๋ฆฌํด ์ฃผ์ ํ๋๊ฐ ์์คํ ์ ์ฒด๋ฅผ ๋ด์ค๋ค.
- ๋ฐฉ์ด ๊ธฐ๋ฒ์ ๋ ์ด์ด๋ก ๊ฒน์ณ์ผ ์๋ฏธ ์๋ค โ ASLR๋ง, ์นด๋๋ฆฌ๋ง์ผ๋ก๋ ๋ถ์กฑ. ๊ฐ ๊ธฐ๋ฒ์๋ ์ฐํ๊ฐ ์์. Defense in Depth๊ฐ ์ ์ผํ ๋ต.
- ํฌ๋งท ์คํธ๋ง ์ทจ์ฝ์ = ๋จ ํ ์ค์ ์ค์ โ
printf(buf)vsprintf("%s", buf). ์์ ์ฃผ์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ชจ๋ ํ์ฉ. ์ฌ์ ํ ๋ ๊ฑฐ์ ์ฝ๋์์ ๋ฐ๊ฒฌ๋จ.
- ์ ธ์ฝ๋ ์ ์ฝ ์กฐ๊ฑด โ ์ค์ ๊ณต๊ฒฉ์์ null ๋ฐ์ดํธยทํ๋ฆฐํฐ๋ธ ๋ฌธ์ยทํน์ ๋ฐ์ดํธ ๊ธ์ง ๋ฑ ๋ค์ํ ์ ์ฝ์ด ์กด์ฌ. ํด๋ฆฌ๋ชจํฝ ๊ธฐ๋ฒ์ด ์ด๋ฅผ ๊ทน๋ณตํ๋ ์ฐฝ์์ ํด๋ฒ.
- ํ๋กํ ์ฝ ์ดํด๊ฐ ๊ณต๊ฒฉ์ ์ ์ โ TCP ์ํ์ค ๋ฒํธ, IP ๋จํธํ, ICMP ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅด๋ฉด SYN ํ๋ฌ๋๋ RST ํ์ด์ฌํน๋ ๋ถ๊ฐ๋ฅ. ์ด ์ฑ ์ด "๊ธฐ๋ฒ"๋ณด๋ค "์๋ฆฌ"๋ฅผ ๋จผ์ ๊ฐ๋ฅด์น๋ ์ด์ .
- RSA ๋ณด์ = ์ํ ๋ฌธ์ ์ ์ด๋ ค์ โ ์ํธ์ ๊ฒฌ๊ณ ํจ์ ๋จ์ํ "ํค๊ฐ ํฌ๋ค"๋ ๊ฒ ์๋๋ผ ์ํ์ ๋ฌธ์ ์ ๊ณ์ฐ ๋ณต์ก๋์ ๊ทผ๊ฑฐ. ์์ ์ปดํจํ ์ด ์ด๋ฅผ ๋ฐ๊ฟ ์ ์์.
์ ์
- Jon Erickson: ๋ณด์ ์ฐ๊ตฌ์. No Starch Press์ ํจ๊ป ์ด ์ฑ ์ 2003๋ (์ดํ), 2008๋ (2ํ)์ ์ถ๊ฐ. "๊ธฐ๋ฒ์ ๋์ดํ์ง ์๊ณ ์ดํด๋ฅผ ๊ฐ๋ฅด์น๋" ์ ๊ทผ ๋ฐฉ์์ผ๋ก ํดํน ์ ๋ฌธ์ ์ค ๊ฐ์ฅ ๊ธฐ์ด๊ฐ ํํํ ์ฑ ์ผ๋ก ํ๊ฐ๋ฐ์.