이제 생각하다 보니까 Canary 보호 기법을 알려줘놓고 정작 그 전에 알려줘야 했던 버퍼 오버플로우를
안알려줬다 줄여서 BOF라 하겠다
BOF(buffer overflow)란 일종의 버그면서 이를 이용한 공격 방법이 된다
프로그램이 실행될 때 입력받는 값이 버퍼를 채우다 못해 다른 버퍼를 침범해 버리는 현상을 말한다
버퍼에 대해 잘 모르는 분을 위해 아래를 먼저 보고 오는 것을 추천한다
https://noobhack.tistory.com/28
[NOOBHACK] BOF란
BOF란 우리가 컴퓨터를 사용할때 여러 데이터를 임시적으로저장하는 물리적 공간을 말한다 예시로는 우체통 정도가 있다 우체통은 버퍼고 우체통 안에 있는 우편물(데이터)은 결국 우체국(컴퓨
noobhack.tistory.com
버퍼가 가득찬 상태에서 데이터가 더 들어간다면 버퍼 안의 데이터가 밀려 나가는 것이 아닌 덮어 씌어지게 되는 것이다
아래의 예시를 한번 살펴보자
편의상 ret와 sfp의 크기는 1바이트라 가정한다
버퍼 공간
입력 받을 공간 | 입력 받을 공간 | 입력 받을 공간 | sfp | ret | 다른 값 | 다른 값 |
밑줄을 친 곳이 사용자가 입력할 공간이다
그리고 "ABCDEF"를 입력해 본다
버퍼 공간
A | B | C | D(sfp공간) | E(ret 공간) | F | 다른 값 |
이렇게 다른 sfp,ret라는 공간과 더불어 다른 값 까지 덮어 버려 메모리가 오염 되는 현상이 발생했다 이것이
BOF의 원리다
이걸 이용한 해킹 예시를 들어보자
그전에 우리는 sfp와 ret라는 레지스터를 알아야 할 필요가 있다
https://noobhack.tistory.com/29
[NOOBHACK] sfp,ret의 대한 설명
포너블을 처음 접하신 분이라면 스택의 구조가 buffer+sfp+ret으로 이루어 졌다는 것 쯤은 알 것이다 buffer란 그냥 데이터가 저장되는 공간이라는 것을 생각하면 되고 sfp와 ret를 모르는 분들을 위해
noobhack.tistory.com
그리고 sfp는 스택 구조상 ret를 메모리 컬렙션(메모리 변조)를 일으키기 위해선 어쩔 수 없이 변조 시켜야 하는 대상이 되며ret가 주 BOF의 대상이 된다
ret가 왜 중요하냐면 어셈블리어의 관점으로 본다면 다시 돌아가서 실행 시켜야할 메모리 주소가 있으니 그 값을 변조 시키면 어셈블리어 코드 내에서 원하는 명령어를 실행 시킬 수 있기 때문이다
손수 작성한 이해하기 편한 코드를 작성해 보았다
1번 주소.작업 |
2번 주소.작업 |
3번 주소.6번 주소로 돌아가기(ret) |
4번 주소.비밀 작업 |
5번 주소.?번 주소로 돌아가기 |
6번 주소.작업 |
7번 주소.작업 |
8번 주소.??번 주소로 돌아가기(ret) |
이러한 어셈블리어 코드가 있을 때에 1번에서 부터 아래로 실행되는 코드였을때
위에서 설명한 원리로 BOF가 일어나
3번의 주소가 변조 되었을 때에는
1번 주소.작업 |
2번 주소.작업 |
3번 주소.4번 주소로 돌아가기(ret) |
4번 주소.비밀 작업 |
5번 주소.?번 주소로 돌아가기 |
6번 주소.작업 |
7번 주소.작업 |
8번 주소.??번 주소로 돌아가기(ret) |
3번 주소(ret)가 6번으로 돌아 가야 할 것을 4번 주소로 돌아가라 바꿔버려
어셈블리어 코드는 결국 의도치 않은 프로세스를 실행 시킨 것 이다
이것이 BOF의 간단한 해킹 원리이다 이런 방식으로 BOF의 버그를 악용 하는 것이다
이제 다음부터는 dreamhack의 문제를 풀어보며 BOF와 어셈블리어를 더더욱 파헤쳐 볼 것이다
그리고 BOF를 방지하기 위해 나온 메모리 보호 기법 Canary가 있다고 한다
https://noobhack.tistory.com/11
[NOOBHACK] Canary 메모리 보호 기법
오늘은 시스템 해킹에서 자주 사용 돼는 Canary 보호 기법에 대해 알아볼 것이다 먼저 Canary의 기원 같은건 집어 치우고 대충 새 이름이며, 광부들이 질식사 하지 않기 위해 산소 농도에 민감한 Cana
noobhack.tistory.com
'해킹 공격' 카테고리의 다른 글
[NOOBHACK] 언더플로우?? (0) | 2023.09.10 |
---|---|
[NOOBHACK] Fream Pointer Overflow 취약점 (FPO) (0) | 2023.02.08 |
[NOOBHACK] XSS 공격 기법 (0) | 2022.08.16 |
[NOOBHACK] 중간자 공격 MITM (0) | 2022.08.15 |
[NOOBHACK] blind SQL injection 공격 기법 (BLIND) (0) | 2022.08.05 |