Task 3: Level-2 Attack
본 task 에서는 서버가 주요 정보를 출력하지 않게 하여 공격의 난이도를 높인다. 이번 공격의 타겟은 10.9.0.6 서버이다. (포트는 여전히 9090을 사용함)
이번에는 버퍼의 주소 값 만을 제공하는 것을 알 수 있다. 즉, bof값은 더 이상 제공하지 않는다. 즉, 버퍼의 크기는 더 이상 우리가 알 수 없는 값이다. 따라서 공격을 수행하기 어렵다. (물론 Makefile 을 확인하면 실제 버퍼의 크기를 알 수 있으나, 이 파일을 열어서 버퍼의 크기를 확인하지 않고 task 를 수행해야 한다. 왜냐하면 실제로 공격을 수행하는 공격자는 이러한 정보를 알 수 없기 때문이다.) 공격을 단순하게 하기 위하여 버퍼의 크기가 주어져 있는 상황을 상정한다. 또 다른 힌트로는, 32-bit 시스템 기준으로 메모리 특성상 frame pointer에 저장된 값은 언제나 4의 배수라는 것이다.
버퍼의 크기가 [100, 300]으로 주어졌을 때 버퍼오버플로우 공격을 수행하는 payload 를 만들어라. 단, 해당 범위의 버퍼사이즈에 모두 대응하는 하나의 payload를 작성해야 한다. Brute force등의 방법을 이용하는 경우 점수는 없다. 왜냐하면 더 많은 공격 시도를 할수록 상대방에게 발각당하고 상대방이 대응할 가능성이 커지기 때문이다. 따라서 공격의 횟수를 줄이며 공격하는 것이 중요하다. 보고서에는 어떠한 방법을 이용해서 공격했는지 설명하고, 공격에 성공한 증거를 제시하고, 코드를 포함하라. Canary value 와의 연관성을 설명해라.
다시 서버를 켜주자.
이전에 server1을 공격하기 위해 사용했던 exploit.py코드를 아래와 같이 수정하자.
코드는 주석으로 최대한 자세히 설명해두었다.
코드를 실행시켜주자.
생성된 badfile을 서버로 보내주고 서버에서 쉘코드가 실행되었는지 확인해보자.
서버1에서 처럼 새로운 /bin/bash가 실행된 것을 볼 수 있고 whoami에도 root라고 응답하는것을 볼 수 있다.
서버2는 Canary로 보호받고 있고 정확한 버퍼크기와 return address위치를 모르기 때문에 해당 부분을 고려해서 코드를 작성해야했다.
- Buffer Address 활용
- 페이로드는 알려진 버퍼 주소(0xffffda3c)를 기반으로 쉘코드를 실행할 정확한 Return Address를 계산한다.
- NOP 슬라이드를 사용하여 Return Address가 약간 부정확해도 성공할 수 있도록 설계한다.
- 유니버설 페이로드 설계
- 버퍼 크기를 명확히 알지 못하지만, NOP 슬라이드와 충분히 긴 페이로드를 사용하여 [100, 300] 범위를 모두 커버한다.
- Canary 값 회피
- Canary 값을 덮어쓰지 않도록 페이로드 크기를 Canary가 위치하는 영역 앞까지만 설계한다.
- 페이로드에서 Canary 이후 영역은 건드리지 않으므로 Canary 보호를 우회한다.
공격 성공 원리
- Return Address 점프
- Return Address를 정확히 NOP 슬라이드로 덮어써, 프로그램 실행 흐름이 쉘코드로 이동하게 만든다.
- Canary 회피
- Canary 값을 덮어쓰지 않도록 페이로드를 Canary 이전에 제한하여 보호를 우회한다.
- 범용성
- 버퍼 크기 범위(100~300)에 모두 대응할 수 있도록 페이로드를 설계하여, 추가적인 크기 추론 과정 없이 한 번의 공격으로 성공할 수 있다.
'Quality control (Univ. Study) > Information Security' 카테고리의 다른 글
Legal Issues and Ethics (2) | 2024.12.08 |
---|---|
Buffer-overflow attack lab (5) (0) | 2024.12.08 |
Cloud Computing (0) | 2024.12.08 |
Cryptography (1) | 2024.12.07 |
Privacy (2) | 2024.12.07 |