버퍼: 시스템 연산 작업을 위해 필요한 데이터를 임시로 저장하는 공간.
(대부분의 프로그램이 스택을 버퍼로 이용함.
(*malloc()과 같은 반영구적인 데이터 저장 X)
Buffer overflow Attack
=>버퍼의 크기가 40으로 설정
40바이트-> 가능!
41~44바이트-> 이전 함수의 bp를 수정할 것.
45~48바이트->return address의 공간 침범
48바이트 이상->이전의 스택에 저장한 값마저도 침범하게 됨.
공격자가 메모리상의 임의의 위치에다 원하는 코드를 저장시키고,
return address가 저장된 지점에 해당 코드를 집어 넣음으로써
EIP에 공격자의 코드가 있는 곳의 주소가 들어가게 해 공격을 하는 방식.
(*버퍼에 데이터를 쓸 때 원하는 코드를 넣게 되는데,
정확한 return address 저장 위치를 찾아 조작해야 함)
strcpy(buffer2, receive_from_client);
라는 코드가 있다고 하자.
client에게 받은 데이터를 buffer2, buffer1에 복사하는 코드
strcpy()함수는 몇 바이트를 저장할지 지정해주지만
strcpy함수는 길이 체크를 해주지 않아서
receive_from_client가 NULL을 만날 때까지 복사를 한다.
위와 같은 스택 구조에서 45~48바이트 위치의 return address도 조작해야 하고
공격 코드도 넣어줘야 한다.
공격자(클라이언트)가 전송하는 데이터는 receive_from_client에 저장되어 버퍼에 복사될 것이다.
strcpy가 호출되어 receive_from_client가 buffer2에 복사될 것을 예상하면
위와 같은 모습으로 스택에 자리 잡게 된다.
*Byte order
=>잘 보면 데이터의 저장 순서가 이상하다고 느끼는데,
바이트 정렬 방식 때문이다.
현존하는 시스템은
big endain//little endian 두가지 저장 방식을 갖는다
각각, 바이트 순서가 낮은 메모리 주소에 높은 메모리 주소로 되고,(BE)
(IBM 370/RISC 기반 컴퓨터, 모토로라의 마이크로 프로세서)
높은 메모리 주소에서 낮은 메모리 주소로 저장하는 방식이다.(LE)
(IBM 호환 sys, 알파 칩의 시스템)
74E3FF59
->Big E=> 74E3FF59
->Little E=>59FFE374 와 같은 방식으로 저장
(리틀 E를 쓰는 이유는 수를 더하거나 뺄때, 낮은 메모리 주소 영역의 변화가 수의 크기 변화에 비해 적기 때문.)
EX. 위 수에 1을 더함
->74E3FF5A
->5AFFE374=>낮은 수의 변하는 낮은 메모리 영역에 영향을 받고,
높은 수의 변화는 높은 메모리에서 잡게 하겠다는 것.
(**Byte order의 방식을 공격시 고려해야 한다! Little E라면 바이트를 뒤집어 넣어줘야함.)
위 그림의 공격 코드는 execve("/bin/sh",...) (쉘을 띄우는 것.)
(해당 코드는 실제 쉘 코드는 아님. 그냥 저런 코드가 들어 있다는 이야기.)
쉘 코드의 시작점은 0xbffffa60으로,
함수 리턴시 return address는 EIP에 들어가게 될 것이고.
execve("/bin/sh",..)를 수행하게 되는 것이다.
(**return address위의 버퍼 공간이 쉘 코드를 넣을 만큼 충분하지 않다면?
=>다른 공간을 찾아야지!, 위의 공간에서는 function함수가 사용된 스택 공간)
=>return adrress이후 40byte공간의 명령을 수행하게 하면 됨.
(return address에 40주면 안되냐고? 명령어의 주소를 정확히 알아내는건 어려움)
따라서, 수행 지점 변경을 하는걸 사용.
=>이럼에도 부족하다면...?
return address부분을 제외한 위아래 모든 공간을 사용하게 코딩, 안되면 또 다른공간을 찾아야지..
'분식집 > 해킹..!?' 카테고리의 다른 글
HTTP의 요청과 응답. (0) | 2023.02.19 |
---|---|
Buffer overflow-쉘 코드 만들기 (0) | 2023.02.15 |
레지스터 진행 따라가기 (0) | 2023.02.15 |
데이터 통신이란! (0) | 2023.02.10 |
8086CPU의 레지스터 구조(달고나) (0) | 2023.02.10 |