[정의] 루트권한 SUID 프로그램 실행 시 버퍼 초과 데이터를 입력, 비정상 작동에 의한 복귀주소를 조작, 공격 Shell을 실행시키는 공격 기법.


[개념] 사용자가  프로그램에서 저장을 위해 할당한 것보다 더 많은 데이터를 입력하려는 시도.


[유형] 
-Local Buffer Overflow : 루트권한 프로그램 취약점 이용
-Remote Buffer Overflow : RPC, FTPD 서비스 취약 이용


[버퍼 오버플로우의 불안전한 코드 사례]

불안전한 코드 안전한 코드
void manipulate_string(char* string) {
   char buf[24];
strcpy(buf, string);
}}
 void manipulate_string(char* string) {
char buf[24];
/* 복사하려는 buf와 길이를 비교. */
if (strlen(string < sizeof(buf))
strncpy(buf, string, sizeof(buf)-1);
/* 문자열은 반드시 null로 종료 */
buf[sizeof(buf)-1] = '₩0';
……
 }
매개변수로 받은 문자열 크기가 지역버퍼에 복사가 되는지 확인하지 않고 strcpy() 함수를 이용 데이터를 복사 매개변수로 받은 변수와 복사하려는 buf의 크기를 비교하여 buf의 크기를 제한하고 마지막 문자에‘₩0’을 삽입


[사례] 

#include <stdio.h>

void sample_function ( char* string )

{

         char buffer[16];

         strcpy (buffer, string);

         return;

}

void main()

{

         char big_buffer[256];

         int i;

         for (i=0; i<256; i++)

                 big_buffer[i] = 'A';

                 sample_function (big_buffer);        // 큰 버퍼를 함수에 보냄

}

}


- 버퍼 오버플로우를 일으키고 운영체제의 스택이 크래시되게 하여 특정 코드가 실행되게 함.

 

 

 


[공격 종류] 
-서비스 거부 공격: 메모리 스택에 많은 데이터를 대입하여 발생. 운영체제 데이터와 같은 중요한 정보를 덮어 써서 시스템 운영체제가 기능을 수행하지 못하게 함.
-접근 권한 획득: 스택에 적당한 크기의 정보를 입력하여 복귀 포인터를 덮어씀. 원래 실행되어야할 코드 대신 자신의 코드를 가리켜 실행시킴. 패스워드 해쉬 값을 출력하거나, 새로운 계정을 생산하는 것등을 할 수 있음.


[대응방안] 스택 영역 실행/쓰기제한 및 무결성 검사. 프로그램/서버의 신속한 패치, 보안 OS 도입, 시큐어코딩.

 

 

기본 예제 (위키피디아)

아래의 예제에서, 프로그램은 메모리에서 인접해 있는 두 아이템을 정의하였다: 8 바이트 길이 스트링 버퍼, A. 그리고 2 바이트 정수형, B. 우선, A 는 8바이트 모두 숫자 0값만 포함하고 B는 숫자 3을 포함한다. 문자들은 1바이트 크기이다.

A B
0 0 0 0 0 0 0 0 0 3

이제, 프로그램은 문자열 "excessive"를 A 버퍼에 저장한다. 한 바이트짜리 0값이 스트링의 끝임을 알리기 위해 따라온다. 스트링의 길이를 확인하지 않음으로 B의 값을 덮어쓴다.

A B
'e' 'x' 'c' 'e' 's' 's' 'i' 'v' 'e' 0

비록 프로그래머가 B가 바뀌는 것을 전혀 의도하지 않았다 하더라도, B의 값은 문자열의 한 부분을 구성하는 숫자로 바뀌었다. 이 예제에서 ASCII를 사용하는 빅 엔디언 시스템에서 "e" "0"는 숫자 25856가 될 수 있다. B가 프로그램이 정의한 유일한 다른 변수였다면, B의 끝을 지나가는 긴 스트링을 쓰는 것은 세그멘테이션 오류, 프로세스 종료와 같은 오류를 발생시켰을 것이다.

 

 

 

'ITPE > 보안' 카테고리의 다른 글

Heap Overflow  (0) 2021.04.01
IP Spoofing  (0) 2021.04.01
Slack Space 분석  (0) 2021.03.30
DNSSEC  (0) 2021.03.28
IPSec(IP Security)  (0) 2021.03.28

 

 

 

[정의] 공격자가 자신의 IP address를, 공격하고자 하는 네트워크의 호스트 IP Address로 바꾸어 IP 기반의 인증을 무력화 시키는 공격.

 

 

[절차]

 

Target System과 Client는 신뢰관계 형성 (ID, PW없이 접근).
IP Protocol 취약점을 습득하기 위해서는 Sniffing 공격이 선행(Seq Number 획득)

 

 

 

 

 

1.공격자는 클라이언트에 TCP SYN Flooding 공격 (rsh,rlogin)

2.공격자는 클라이언트의 IP로 속여 서버에 연결.
3.서버는 SYN/ACK 패킷을 보내고 클라이언트는 TCP SYN Flooding
공격때문에 연결이 이뤄지지 않고 서버 패킷은 사라지게 된다.(미확인)
4.공격자는 서버에 ACK 패킷을 보낸것처럼 속이면서,
IP Spoofing 명령어가 들어있는 패킷을 보내 신뢰 관계에 있는
클라이언트라고 속이면 연결이 이루어지게 된다.


[대응방안]
- 외부에서 들어오는 패킷중에서 출발지 IP 주소(Source IP Address)에
내부망 IP 주소를 가지고 있는 패킷을 라우터 등에서 패킷 필터링을 사용하여 방어.
- 내부사용에 의한 공격은 막을 수 없으므로 각 시스템에서 TCP Wrapper, ssh 설치 운영하고
rsh rlogin 등과 같은 인증과정이 없는 서비스는 미사용.
- IP Spoofing TCP/IP 설계와 구현의 문제이므로 새 프로토콜을 사용하지 않는 이상
완벽한 보호대책은 존재할 수 없으므로 지속적인 관리와 점검필요.

 

 

 

'ITPE > 보안' 카테고리의 다른 글

Heap Overflow  (0) 2021.04.01
Buffer Overflow 공격  (0) 2021.04.01
Slack Space 분석  (0) 2021.03.30
DNSSEC  (0) 2021.03.28
IPSec(IP Security)  (0) 2021.03.28

 

 

[정의] 저장매체에 물리적으로 할당 됐으나 논리적으로 사용할수 없는 공간.

 

[구분] 램슬랙, 드라이브 슬랙, 파일시스템 슬랙(램슬랙+드라이브 슬랙), 볼륨슬랙으로 구분


[구분별 내용]

-램슬랙: 램에 저장된 데이터가 저장장치에 저장될때 나타나는 특성에 따라 붙여진 이름

 

-드라이브슬랙: 클러스터의 사용으로 인해 낭비되는 공간

 

-파일시스템 슬랙: 물리적인 공간을 사용하기 위해 파일 시스템을 생성하는데 마지막 부분에 사용할수 없는 영역(악성코드 은닉에 많이 사용). 1002KB 의 Volume 이 있는데 클러스터가 4KB 이면 마지막 2KB 는 사용할 수 없는 영역이 된다

 

-볼륨슬랙: 전체 볼륨 크기와 할당된 파티셔닝크기의 차이로 발생하는 슬랙 스페이스.
파티션의 크기는 임의로 변경 가능하기 때문에 볼륨슬랙은 변경이 가능

 

 

 

 

 

 

 

'ITPE > 보안' 카테고리의 다른 글

Buffer Overflow 공격  (0) 2021.04.01
IP Spoofing  (0) 2021.04.01
DNSSEC  (0) 2021.03.28
IPSec(IP Security)  (0) 2021.03.28
Tunneling  (0) 2021.03.28

+ Recent posts