본문 바로가기
정보보안기사

[정보보안기사] 시스템해킹 - 해킹기법 개념 정리

by 공대냥이 2018. 10. 16.
반응형

1. 버퍼 오버플로우 공격(Buffer Overflow Attack)


버퍼 오버플로우는 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리의 범위를 넘어선 위치의 자료를 읽거나 쓰려고 할 때 발생한다. 버퍼 오버플로우가 발생하게 되면 프로그램의 오작동을 유발시키거나, 악의적인 코드를 실행시킴으로써 공격자 프로그램을 통제할 수 있는 권한을 획득하게 된다.


스택(Stack) 버퍼 오버플로우 : 스택은 함수 처리를 위해 지역변수 및 매개변수가 위치하는 메모리 영역을 말한다. 스택에 할당된 버퍼들이 문자열 계산등에 의해 정의된 버퍼의 한계치를 넘는 경우 버퍼 오버플로우가 발생하여 복귀 주소(Return Address)를 변경하고 공격자가 원하는 임의의 코드를 실행한다.


힙(Heap) 버퍼 오버플로우 : 힙은 사용자가 동적으로 할당하는 메모리영역이다. (malloc()등의 메모리 할당 함수 이용) 힙에 할당된 버퍼들에 몬자열이 저장되어 질 때, 최초 정의된 힙의 메모리 사이즈를 초과하여 문자열 등이 저장되는 경우 버퍼 오버플로우가 발생하여 데이터와 함수 주소 등을 변경하여 공격자가 원하는 임의 코드를 실행한다.


대응방안 


스택 가드 : 메모리상에서 프로그램의 복귀 주소(Return Address)와 변수 사이에 카나리 단어(Canary Word)[각주:1]를 저장해 두었다가 그 값이 변경되었을 경우 프로그램 실행을 중단하는 기술


ASLR(Address Space Layout Randomization) : 메모리 공격을 방어하기 위해 주소 공간 배치를 난수화하는 기법이다. 실행 시 마다 메모리 주소를 변경시켜 악성코드에 의한 특정주소 호출을 방지한다.



레이스 컨디션 공격(Race Condition Attack)


둘 이상의 프로세스나 스레드가 공유자원에 동시에 접근할 때 접근하는 순서에 따라 비정상적인(원하지 않는) 결과가 발생하는 조건/상황을 말한다. 

실행되는 프로세스가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시파일을 목적파일로 연결(심볼릭 링크)하여 악의적인 행위를 할 수 있는데 이를 레이스 컨디션 공격이라 한다.

만약 프로세스가 setuid 설정이 되어 root권한으로 실행된다면 권한 상승을 통한 중요 자원에 접근하는 심각한 문제가 발생할 수 있다.


대응방안


1. 가능하면 임시파일을 생성하지 않는다.

2. 파일 생성 시 이미 동일한 파일이 존재하는 경우 파일 생성 또는 쓰기를 금지한다.

3. 사용하고자 하는 파일에 링크가 걸려있으면 실행을 중단한다.

4. umask를 최하 022정도로 유지하여 임시로 생성한 파일이 공격자에 의해 악의적으로 삭제되지 않도록 한다.



포맷 스트링 공격(Format String Attack)


C 언어의 printf()등의 함수에서 사용되는 문자열의 입·출력 형태를 정의하는 문자열로 서식 문자열이라 표현한다.

포맷 스트링을 인자로 하는 함수의 취약점을 이용한 공격으로 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 포맷 스트링을 그대로 사용하는 경우 발생할 수 있는 취약점이다.

공격자는 포맷 스트링을 이용하여 취약한 프로세스를 공격하거나 메모리 내용을 읽거나 쓸 수 있다. 그 결과, 공격자는 취약한 프로세스의 권한을 획득하여 임의의 코드를 실행할 수 있다.


대응방안


취약한 사용 예시

#include <stdio.h>

int main(int argc, char **argv){

printf(argv[1]);

}


안전한 사용 예시

#include <stdio.h>

int main(int argc, char **argv){

printf("%s", argv[1]);

}





  1. 카나리 단어 : 메모리 변경 여부를 위해 저장해 두는 특정 값 [본문으로]
반응형