보안 공격 종류

 

Summry

본 문서에서는 리눅스 서버에 위협이 되는 대표적인 공격을 간단히 정리한다.

send me email if you have any questions.


1. 공격 준비

공격자는 공격을 시작하기 전, 대상에 대한 정보를 수집한다.

  • IP 주소부터 서비스 (포트), 버전 정보 등 점검 범위를 좁혀감

1.1 Address scan

공격 대상이 되는 IP 주소를 수집하는 것을 Address scan 이라 한다.

일반적으로 broadcast address 로 ICMP packet 을 전송

  • ICMP(Internet Control Message Protocol)
    • IP 통신 제어 정보나 에러를 통지할 때 사용하는 프로토콜

ping 명령어를 사용하여 10.0.2.0/24에 있는 호스트를 조사하는 예

ping –b 10.0.2.255

Address scan 방지
브로드 캐스트 주소로 ICMP Echo Request에 대한 응답을 하지 않도록 설정

sysctl –w net.ipv4.icmp_echo_ignore_broadcasts=1

1.2 Port scan

IP 주소 확보 후, 호스트에서 가동되는 서비스 조사하기 위해 포트 정보를 수집하는 것을 Port scan 이라 한다.
보통 외부로 오픈된 서비스는 포트를 연 상태로 접속을 기다리기 때문에 열려있는 포트로부터 어떤 서비스를 이용하는지 유추가 가능하다.
예) 웹 서버 서비스에 보안 취약점이 발견된 직후, 공격자가 포트 스캔을 통하여 웹 서버가 구동되는 것을 확인한 경우 공격자가 쉽게 웹 서버 공격 가능

포트 스캔 종류(TCP header falg 에 따라 분류)

  • TCP 커넥트 스캔 - TCP 세션이 수립되는지로 포트 오픈 확인
  • TCP 하프 스캔 - (SYN 스캔) TCP 연결요청만 (SYN 패킷만 전송) 을 수행, 세션 수립이 되지 않음
  • TCP ACK 스캔 - TCP의 ACK 플래그를 ON으로 설정해 패킷을 송신하는 방법
  • TCP FIN 스캔 - TCP의 FIN 플래그를 ON으로 설정해 패킷을 송신하는 방법
  • TCP Null 스캔 - TCP의 모든 플래그를 OFF로 설정해 패킷을 송신하는 방법
  • Xmas 트리 스캔 - TCP의 모든 플래그를 ON으로 설정해 패킷을 송신하는 방법
  • UDP 스캔 - UDP 패킷을 송신하는 방법

포트 스캔 대책

  • 불필요한 패킷을 차단하도록 방화벽 설정
  • 사용하지 않는 포트는 열어놓지 않음 (불필요한 서비스는 종료)
  • 침입탐지시스템 (IDS) 을 사용해 포트 스캔 탐지
  • 시스템 로그 감사

2. 서버에 대한 공격

서비스의 방해, 서버 무단 침입, 서버 내 정보 탈취 등 목적에 따라 여러 가지 수법 사용해 공격을 실행한다.

2.1 Dos/DDos Attack

SYN Flood Attack
TCP 연결을 개시하는 SYN 패킷 (SYN 플래그를 ON으로 설정한 패킷) 을 대량으로 전송하는 공격

  1. 공격자는 TCP 연결을 개시하는 SYN 패킷 전송한다.
  2. SYN 패킷을 받은 서버는 SYN/ACK 패킷 전송 후, ACK 패킷 기다린다.(3-way handshake)
  3. SYN Flood 공격에 사용된 패킷의 출발지 IP 가 위장되었기 때문에 ACK 패킷을 전송하지 않는다.
  4. 서버는 타임아웃이 될 때까지 대기하게 되고 그 동안, 시스템 자원소모 및 접속 요청 응답이 제한된다.

Smurf Attack

  1. 공격자는 출발지를 변조한 ICMP 패킷을 목적지 네트워크로 발송한다.
  2. 요청 패킷을 받을 IP 주소는 목적지 네트워크의 브로드캐스트 주소로 한다. 즉, 목적지 네트워크의 모든 시스템에 ICMP 패킷을 전송한다.
  3. ICMP 패킷의 출발지 IP 주소는 타겟 서버의 IP 주소로 설정한다.
  4. ICMP Echo Request 패킷을 받은 목적지 네트워크의 시스템은 ICMP Echo Reply 패킷을 출발지 (타겟 서버) 로 보낸다.
  5. 타겟 서버는 ICMP 패킷을 대량으로 받아 네트워크 과부하 상태가 된다

대응방안

  • 브로드캐스트로 요청된 ICMP 패킷에 응답하지 않도록 설정
  • 라우터와 서버에 패킷 필터링 임계 값을 설정하여 패킷 양을 제한

DDoS(Distributed Denial of Service)
미리 다수의 공격용 PC (좀비 PC) 준비 후, 일제히 목표를 공격하는 방법이다.

2.2 Password Crack

대부분 서버는 사용자명과 패스워드를 제대로 입력하면 누구라도 시스템에 로그인 가능하다. 특히 root 사용자는 사용자명이 고정되고 가장 큰 권한을 가진 사용자이기 때문에 주요 크랙 대상이다.

전사공격(Brute Force Attack)
패스워드에 사용되는 모든 문자 (영문 대소문자, 숫자, 기호) 를 조합하여, 해당 패스워드가 풀릴 때까지 대입하는 공격

  • 시간이 많이 걸림 하지만, 컴퓨터의 성능이 나날이 발전하여 짧은 패스워드는 단시간에 풀린다.
  • 패스워드 길이가 길수록 시간이 오래 걸리기 때문에 패스워드 최소 길이를 길게 설정하는 것이 유효한 대책이다.

사전 공격
일반 명사와 고유 명사, 숫자 등을 조합하여 패스워드에 사용하는 경우가 많기 때문에 이러한 문자열을 사전에 준비한 후, 조합하는 방식(일종의 브루트포스 공격)

피싱
정교하게 만든 가짜 로그인 화면에 접속하게 하여 패스워드를 입력하면 가로채는 방법

키로깅
키로거 등을 이용하여 키 입력을 가로채는 방법

사회공학적 방법
메일이나 오프라인 등을 통하여 알아내는 방법

John the Ripper

  • 리눅스에서 사용 가능한 패스워드 크랙 도구
  • 서버 관리자로서 사용자의 패스워드가 안전한지를 체크하기 위해 사용
  • 설치 방법 : yum install john

2.3 보안 홀을 이용한 공격

보안 홀이란 소프트웨어의 기술적 결함이 원인이 되는 경우, 잘못된 소프트웨어 설정이 원인이 되는 경우 등으로 인해 발생하는 취약점을 말한다.

BOF(Buffer OverFlow) Attack
프로그램의 결함을 공격해 프로세스를 뺏거나 강제 종료시키는 공격으로 일반적인 프로그램은 버버로 확보한 메모리 영역을 초과하여 데이터를 저장할 수 없으나 버그 등의 원인으로 데이터가 버퍼에 저장될 때, 버퍼 크기를 초과한 만큼 데이터를 덮어쓰게 된다.
의도적으로 버퍼를 넘는 데이터를 입력하여 프로그램 강제 종료, 프로세스 권한 탈취, 공격자가 의도한 프로그램 실행 등의 결과를 만들 수 있다.

  • 최신 프로그래밍 언어에서는 거의 발생하지 않는다.
  • C 나 C++ 과 같이 메모리 접근에 높은 자유도를 가진 프로그래밍 언어의 경우 자주 발생하는 취약점이다.

2.4 Web Application Attack

리눅스 서버 관리자의 범위는 아니나 서버 관리자가 전혀 관여하지 않아도 되는 것은 아니다.
웹 애플리케이션 취약점은 서버 측의 설정만으로 막을 수 없고, 개발자가 직접 프로그램을 수정해야 하는 경우가 대부분이다.

XSS(Cross Site Script)
게시판이나 방명록 등 사용자가 입력한 내용을 웹 페이지에 표시할 때 나타날 수 있는 취약점을 이용해 공격자가 게시판에 악의적인 코드가 포함된 게시물을 작성하고 사용자가 게시글에 접근하게 되면 공격자가 작성한 악성코드 실행되어 악의적인 행위 수행할 수 있는 공격이다. 예) <script> 문자열을 그대로 처리할 경우: 문자열이 아닌 태그로 인식 → 스크립트 작동

Session hijacking
웹 서버와 웹 브라우저 사이에서 맺어진 세션 정보를 가로채, 공격자가 사용자인 것처럼 위장하는 공격이다.
Linux session hijacking

SQL injection
대다수의 웹 사이트는 SQL 데이터베이스 사용하고 사용자 입력에 따라 SQL 입출력이 발생한다.
사용자가 입력한 문자열을 체크하지 않는 경우 공격자가 사용자 입력 부분에 악의적인 SQL 구문을 입력하면 악의적인 SQL 구문이 실행되어 데이터베이스 파괴, 데이터 유출 등의 결과를 초래할 수 있다.

OS command injection
사용자의 입력 값을 검증하지 않는 경우, 운영체제의 명령어를 임의로 실행할 수 있는 공격으로 방지를 위해서는 웹 애플리케이션에서 문자열 처리가 필요하다.
예) 웹 애플리케이션의 현재 사용 디렉터리: /home/user/web/code
– 공격자: “../../../../etc/passwd” 입력 → /etc/passwd에 접근 가능

3. 악성코드

악의적인(malicious) 기능을 하는 소프트웨어를 악성코드(MALWARE, MALicious softWARE)라 한다.

3.1 Virus

리눅스 서버에 감염되는 바이러스는 매우 적다. 하지만 메일 서버나 파일 서버를 운영할 경우 서버의 파일을 통한 바이러스 감염 위협이 존재하기 때문에 리눅스 서버에도 바이러스 대책이 필요하다.

바이러스

  • 정상적인 파일이나 하드디스크 부트 섹터에 기생
  • 다른 파일을 감염시키고 증식함

  • 스스로 복제하고 증식함
  • 메일이나 웹 사이트를 통해 감염
  • 보안 취약점을 이용해 네트워크에서 증식함
  • 폭발적으로 감염이 확대되는 경우도 존재함

3.2 rootkit

한 번 시스템에 침입했다고 해도, 다음에 같은 방법으로 침입할 수 있다는 보장은 없기 때문에 시스템에 성공적으로 침입한 공격자는 침투 흔적 은폐 및 백도어 도구 설치를 하게 되는데 침투 흔적 삭제 및 백도어 도구 중 대표적인 도구가 rootkit이다.
시스템 로그의 접속 기록으로 탐지하는 경우 흔적을 없애려고 로그를 삭제하거나 로그 데몬을 중지하면 더 의심스럽기 때문에 침입 당시의 기록만 삭제, 가짜 로그로 변경하는 기능을 포함한 rootkit 을 사용한다.

동작 방식

  • 시스템 관리자에게 탐지되지 않도록 정상적인 명령어(find, pw, w 등) 변조
  • 변조된 명령어는 악의적인 프로세스, 침입자, 침입과 관련된 파일이 표시되지 않는다.

3.3 key logger

키보드로부터 입력받은 문자열을 로그 파일로 저장하거나 네트워크를 통해 전송하는 도구

  • 컴퓨터에 잠복하여 정보를 훔치는 일종의 스파이웨어
  • 콘솔에서 root 사용자로 로그인할 경우, 화면에는 입력하는 패스워드가 표시되지 않음
  • 키로거 동작 시, 로그인할 때 패스워드가 남거나 네트워크를 통해 공격자에게 전달됨