[보안] 시스템 보안 위협

koline·2023년 9월 15일
0

시스템 보안 위협




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

버퍼 오버플로우 공격은 메모리에 할당된 버퍼 크기를 초과하는 양의 데이터를 입력하여 이로 인해 프로세스의 흐름을 변경시켜서 악성 코드를 실행 시키는 공격기법이다.

스택 버퍼 오버플로우 (Stack Buffer Overflow) 공격

메모리 영역 중 Local Value나 Return Address가 저장되는 스택 영역에서 발생하는 오버플로우 공격이다.

스택 영역에 할당된 버퍼 크기를 초과하는 양의 데이터(실행 가능 코드)를 입력하여 복귀 주소를 변경하고 공격자가 원하는 임의의 코드를 실행하는 공격기법이다.

힙 버퍼 오버플로우 (Heap Buffer Overflow) 공격

프로그램 실행 시 동적으로 할당되는 힙 영역에 할당된 버퍼 크기를 초과하는 데이터(실행 가능 코드)를 입력하여 메모리의 데이터와 함수 주소 등을 변경하여 공격자가 원하는 임의의 코드를 실행하는 공격기법이다.

인접한 메모리(Linked-list)의 데이터가 삭제될 수 있으며, 해당 위치에 특정 함수에 대한 포인터 주소가 있으면 이를 악용하여 관리자 권한 파일에 접근하거나, 공격자의 특정 코드를 실행한다.

버퍼 오버플로우 대응 방안

  1. 스택가드 활용: 카나리(Canary)라고 불리는 무결성 체크용 값을 복귀 주소와 변수 사이에 삽입해 두고, 버퍼 오버플로우 발생 시 카나리 값을 체크, 변할 경우 복귀 주소를 호출하지 않는 방식으로 대응한다.

  2. 스택쉴드 활용: 함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장해 두고, 함수 종료 시 저장된 값과 스택의 RET 값을 비교해서 다를 경우 오버플로우로 간주하고 프로그램 실행을 중단한다.

  3. ASLR(Address Space Layout Randomization) 활용: 메모리 공격을 방어하기 위해 주소 공간 배치를 난수화하고, 실행 시마다 메모리 주소를 변경시켜 버퍼 오버플로우를 통한 특정 주소 호출을 차단한다.(리눅스에서 설정 가능)

  4. 안전한 함수 활용: strcat() => strncat(), sscanf() => fscanf() 등 버퍼 오버플로우에 안전한 함수를 활용한다.




백도어 (Backdoor)

백도어는 어떤 제품이나 컴퓨터 시스템, 암호 시스템 혹은 알고리즘에서 정상적인 인증 절차를 우회하는 기법이다. 즉, 허가를 받지 않고 시스템에 접속하는 권한을 얻기 때문에 대부분 은밀하게 작동한다.

백도어는 어떤 고정된 형태가 있는 것은 아니고 프로그램의 일부로 감춰져 있을 수도 있고, 독자적인 프로그램이나 하드웨어의 모습을 갖기도 한다.

백도어 탐지기법

  1. 프로세스 및 열린 포트 확인: TCPView로 열린 포트를 확인하고 백도어 탐지.
    리눅스에서는 'ps -ef' (실행중 프로세스 확인), 'netstat -an' (열린 포트 확인) 명령어 사용
  2. Setuid 파일 검사: 새로 생성된 Setuid 파일이나 변경된 파일 확인을 통해 백도어 탐지
  3. 백신 및 백도어 탐지 툴 사용
  4. 무결성 검사: 리눅스에서 Tripwire 툴을 사용하여 무결성 검사
  5. 로그 분석: wtmp, secure, lastlog, pacct, history, messages 사용하여 로그 분석



기타 주요 시스템 보안 공격 기법

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

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

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

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

레이스 컨디션 공격은 실행되는 프로세스가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시파일을 심볼릭 링크하여 악의적인 행위를 수행하게 하는 공격기법이다.

키로거 공격 (Key Logger Attack)

컴퓨터 사용자의 키보드 움직임을 탐지해서 저장하고, ID나 패스워드, 계좌번호, 카드 번호 등과 같은 개인의 중요한 정보를 몰래 빼가는 해킹 공격이다.

루트킷 (Rootkit)

시스템 침입 후 침입 사실을 숨긴 채 차후의 침입을 위한 백도어, 트로이 목마 설치, 원격 접근, 내부 사용 흔적 삭제, 관리자 권한 획득 등 주로 불법적인 해킹에 사용되는 기능을 제공하는 프로그램의 모음이다.




참고


[보안] 소프트웨어 개발 보안

profile
개발공부를해보자

0개의 댓글

관련 채용 정보