본문 바로가기
Quality control (Univ. Study)/Information Security

Buffer-overflow attack lab (2)

by 생각하는 이상훈 2024. 12. 4.
728x90

Task 1: Shellcode

버퍼 오버플로우 공격의 최종 목적은 악의적인 코드 (malicious code)를 타겟 프로그램에 주입하는 것이다. (Code injection). 이를 통하여 악의적인 코드는 타겟 프로그램의 privilege 로 실행되게 된다. 쉘코드(shellcode)는 많은 코드 인젝션 공격에 활용된다. 본 Task 에서는 shellcode 를 익힌다. 쉘코드는 코드 인젝션 공격에 흔히 사용된다. 쉘코드는 shell 에서 수행되는 코드의 조각이고 주로 어셈블리로 작성된다. 본 실습에서는 쉘코드의 바이너리 버젼만 제공하고 바이너리의 동작은 복잡하기 때문에 자세히 설명하지는 않는다.

이 쉘코드는 ‘/bin/bash’ 쉘 프로그램을 수행하며 (1), command argument ‘-c’와 (2), command string (3)을 받는다. 따라서 shell program 이 (3)의 string 에 있는 프로그램을 수행하게 된다. 맨 마지막의 *는 placeholder 으로, 쉘코드 수행에서는 0x00 으로 치환된다. 모든 문자열은 맨 마지막에 0 을 갖고 있어야 하지만, 우리는 shellcode 에 0 을 직접 입력하지 못하므로 이러한 방식을 사용한다. Shellcode 가 다른명령을 수행하게하고 싶으면,단순히(3)의 명령어를 다른 것으로치환하면 된다. 그러나, 이 때 문자열의 길이를 바꾸지 않도록 주의해야 한다. 왜냐하면 command 바로 이후에 등장하는 argv[]의 시작 위치가 바이너리에 하드코드 되어있기 때문이다. 즉, 길이를 수정하려면 (1)위의 바이너리를 수정해야 하는데, 이는 이번 실험의 범위를 넘어선다. 명령어를 바꾸면서 길이를 유지하려면 스페이스를 지워주거나 적절히 추가하면 된다. 위의 쉘코드는 shellcode 폴더에 있다. 두 개의 파이썬 프로그램 shellcode_32.py 와 shellcode_64.py 가 있으며, 각각 32-bit, 64-bit 쉘코드이다. 해당 프로그램을 수행하면 codefile_32 (혹은 codefile_64)가 생성되며, call_shellcode 를 이용하여 해당 쉘코드를 수행할 수 있다.

내 환경은 64비트니 64류를 사용하겠다.

우선 삭제를 해볼 테스트 파일을 만들어 놓자.

기존의 shellcode_64.py이다.

이 코드를 수정해서 테스트 파일을 삭제하도록 만들어보자.

"/bin/ls -l; echo Hello 64; /bin/tail -n 4 /etc/passwd     *"

위 부분을 아래방식으로 바꿔줘야한다.

"/bin/rm -f /tmp/testfile                                   *"

 

이렇게 수정을 해준다 다만 기존의 명령어와 동일한 길이를 유지할 수 있도록 패딩처리를 해야한다.

이렇게 코드를 저장해주고 코드를 실행시키자.

아까는 보이던 /tmp/testfile이 사라져서 확인이 안되는 것을 볼 수 있다.


 

728x90

'Quality control (Univ. Study) > Information Security' 카테고리의 다른 글

Buffer-overflow attack lab (3)  (0) 2024.12.07
Network security  (2) 2024.12.06
Buffer-overflow attack lab (1)  (1) 2024.12.02
추가 개념정리(Midterm)  (4) 2024.10.22
Basic of Information Security(midterm)  (1) 2024.10.22