관리 메뉴

나구리의 개발공부기록

CHAPTER 01 - 소프트웨어 개발 보안 설계(1) 본문

2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 9강 - 소프트웨어 개발 보안 구축

CHAPTER 01 - 소프트웨어 개발 보안 설계(1)

소소한나구리 2024. 7. 4. 21:30

2024년도 수제비 실기책(6판) 내용 정리


1. 소프트웨어 개발 보안 설계

1) SW 개발 보안의 개념

  • 소스 코드 등에 존재하는 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 등 소프트웨어 개발 과정에서 지켜야할 일련의 보안 활동을 말함
  • SW 개발 보안 생명주기
요구사항 명세 설계 구현 테스트 유지보수
요구사항 중 보안 항목 식별

요구사항 명세서
위협원 도출을 위한 위협 모델링

보안 설계 검토 및 보안 설계서 작성

보안 통제 수립
표준 코딩 정의서 및 SW 개발 보안 가이드를 준수해서 개발

소스 코드 보안 약점
진단 및 개선
모의 침투 테스트 또는 동적 분석을 통한 보안 취약점 진단 및 개선 지속적인 개선

보안 패치

2) SW 개발 보안의 구성요소

  • 정보보안의 세 가지 요소인 기밀성, 무결성, 가용성을 지키고 서버 취약점을 사전에 방지하여 위협으로부터 위험을 최소화하는 구축방법을 말함

(1) SW 개발 보안의 3대 요소(기무가)

3대 요소 설명
기밀성(Confidentiality) 인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성
인가된 사용자에 대해서만 자원 접근이 가능해야 하는 특성
무결성(Integrity) 정당한 방법을 따르지 않고선 데이터가 변경될 수 없으며, 데이터의 정확성 및 완전성과 고의/악의로 변경되거나 훼손 또는 파괴되지 않음을 보장하는 특성

인가된 사용자에 대해서만 자원 수정이 가능하며 전송 중인 정보는 수정되지 않아야 하는 특성
가용성(Availability) 권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성
인가된 사용자는 가지고 있는 권한 범위 내에서 언제든 자원 접근이 가능해야 하는 특성

 

(2) SW 개발 보안 용어(자위취위)

용어 설명
자산(Assets) 조직의 데이터 또는 조직의 소유자가 가치를 부여한 대상
ex) 서버의 하드웨어, 기업의 중요 데이터
위협(Threat) 조직이나 기업의 자산에 악영향을 끼칠 수 있는 사건이나 행위
ex) 해킹, 삭제, 자산의 불법적인 유출, 위/변조, 파손
취약점(Vulnerability) 위협이 발생하기 위한 사전 조건으로 시스템의 정보 보증을 낮추는 데 사용되는 약점
ex) 평문 전송, 입력값 미검증, 비밀번호를 공유
위험(Risk) 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성

3) SW 개발 보안을 위한 공격기법의 이해

(1) DoS공격, DDoS공격, DRDoS공격 차이

 

[1] DoS공격

 

  • 1대의 공격자가 컴퓨터에서 타깃 시스템에 악성 패킷을 보내는 방식으로 공격하고, 타깃 시스템 측에서 공격자의 주소를 확인하고 차단하면 더 이상 공격을 하지 못하는 단점이 존재
  • 직접 공격을 하며 한 사람에 의해 공격을 감행

[2] DDoS공격

 

  • DoS공격에서 진화되었으며 완벽한 공격을 위해 공격자가 여러 대의 컴퓨터를 감염시키고 분산된 좀비 PC들을 이용해 타깃 시스템을 집중적으로 공격해서 서비스를 마비시키는 차이점이 있음
  • 공격을 지시하며 수많은 감염 호스트를 통해 공격을 감행

[3] DRoS공격

 

  • DDoS공격에 비해 공격 근원지 파악이 어렵고 공격 트래픽 생성 효율이 DDoS 공격 보다 훨씬 큼
  • 봇넷 기기들이 직접 공격을 수행하는 것이 아니라 증폭 공격에 활용 되는 서비스를 제공하는 서버 및 서버 역할을 할 수 있는 단말 장비(네트워크 장비, 공유기 등)까지 공격기기로 이용함

 

(2) DoS(Denial of Service)공격

 

  • 시스템을 악의적으로 공격해서 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격
  • 특정 서버에세 수많은 접속 시도를 만들어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP연결을 소진시키는 등의 공격임

[1] DoS 공격의 종류

공격기법 설명 대응방안
SYN 플러딩
(SYN Flooding)


- TCP 프로토콜의 구조적인 문제를 이용한 공격

- 서버의 동시 가용 사용자 수를 SYN 패킷만 보내 점유하여 다른 사용자가 서버를 사용 불가능하게 하는 공격

- 공격자는 ACK를 발송하지 않고 계속 새로운 연결 요청을 하게 되어 서버는 자원할당을 해지하지 않고 자원만 소비하여 고갈됨
1. TCP 연결 타임 아웃을 짧게 가져가서 연결 요청 대기 시간을 줄임

2. Backlog Queue를 늘려줌

3. Syncookie 기능을 활성화 시킴

4. Anti-DDos, 방화벽, 침입차단시스템 등 보안 장비를 통해 침입 탐지 및 차단을 수행

5. 최신 시스템 및 애플리케이션 패치 및 업데이트를 수행
UDP 플러딩
(UDP Flooding)


- 대량의 UDP 패킷을 만들어 임의의 포트 번호로 전송하여 응답 메시지(ICMP Destination Unreachable)를 생성하게 하여 지속해서 자원을 고갈시키는 공격

- ICMP 패킷은 변조되어 공격자에게 전달되지 않아 대기함
-
스머프 (Smurf) / 스머핑 (Smurfing)


- 출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체에게 ICMP Echo 패킷을 직접 브로드캐스팅하여 마비시키는 공격

- 바운스(Bounce)사이트라고 불리는 제3의 사이트를 이용해 공격

** 직접 브로드캐스팅(Direct Broadcast) : IP주소의 호스트 ID 비트를 모두 1로 설정하여 Broadcast 하는 방식
1. 증폭 네트워크로 사용되는 것을 막기 위해서 다른 네트워크로부터 자신의 네트워크로 들어오는 직접 브로드캐스트(Direct Broadcast)패킷을 허용하지 않도록 라우터를 설정

2. 브로드캐스트 주소로 전송된 ICMP Echo Request 메시지에 대해 응답하지 않도록 시스템을 설정
죽음의 핑
(PoD; Ping of
Death)


- ICMP 패킷(Ping)을 정상적인 크기보다 아주 크게 만들어 전송하면 다수의 IP단편화가 발생하고, 수신 측에서는 단편화된 패킷을 처리(재조합)하는 과정에서 많은 부하가 발생하거나, 재조합 버퍼의 오버플로가 발생하여 정상적인 서비스를 하지 못하도록 하는 공격기법
1. 보통 ICMP 패킷은 분할하지 않으므로 패킷 중 분할이 일어난 패킷을 공격으로 의심하여 탐지 하도록 설정

2. 현재 시스템 대부분은 반복적으로 들어오는 일정 수 이상의 ICMP 패킷을 무시하도록 설정되어 있지만, 취약점을 가지고 있다면 패치가 필요
랜드 어택
(Land Attack)


- 출발지(Sourece) IP와 목적지(Destination) IP를 같은 패킷 주소로 만들어 보냄으로써 수신자가 자기 자신에게 응답을 보내게 하여 시스템의 가용성을 침해하는 공격기법
수신되는 패킷 중 출발지 주소와 목적지 주소가 동일한 패킷들을 차단
티어 드롭
(Tear Drop)
- IP 패킷의 재조합 과정에서 잘못된 Fragment Offset 정보로 인해 수신시스템이 문제를 발생하도록 만드는 DoS공격

- 공격자는 IP Fragment Offset 값을 서로 중첩되도록 조작하여 전송하고, 이를 수신한 시스템이 재조합 하는 과정에서 오류가 발생, 시스템의 기능을 마비시키는 공격
과부하가 걸리거나 반복되는 패킷 재전송 요구를 하지않고 버림
봉크
(Bonk)
- 패킷을 분할하여 보낼 때 처음 패킷을 1번으로 보낸 후 다음 패킷을 보낼 때도 순서번호를 모두 1번으로 조작하여 전송하는 DoS 공격

- 똑같은 번호로 전송돼서 오류를 일으킴
보잉크
(BoinK)
- 처음 패킷(패킷의 크기를 100이라고 가정)을 1번으로 보낸 후 다음 패킷을 100번, 다음 패킷을 200번, 20번째 패킷을 2002번, 21번째 패킷을 100번, 22번째 패킷을 다시 2002번 등으로 중간에 패킷 시퀀스 번호를 비정상적인 상태로 보내서 부하를 일으키게 하는 공격기법

 

** 티어드롭, 봉크, 보잉크의 공통점은 모두 오류 제어 로직을 악용하여 시스템 자원을 고갈 시키는 공격임

 

(3) DDoS(Distributed Denial of Service)공격

  • DoS의 또 다른 형태로 여러 대의 공격자를 분산 배치하여 동시에 동작하게 함으로써 특정 사이트를 공격하는 기법
  • 해커들이 취약한 인터넷 시스템에 대한 액세스가 이뤄지면, 침입한 시스템에 소프트웨어를 설치하고 이를 실행시켜 원격에서 공격을 개시함
구성요소(HAMAD - 하마드) 설명
핸들러(Handler) 마스터 시스템의 역할을 수행하는 프로그램
에이전트(Agent) 공격 대상에 직접 공격을 가하는 시스템
마스터(Master) 공격자에게서 직접 명령을 받는 시스템
여러 대의 에이전트를 관리하는 역할
공격자(Attacker) 공격을 주도하는 해커의 컴퓨터
데몬 프로그램(Daemon) 에이전트 시스템의 역할을 수행하는 프로그램

 

(4) DRoS(Distributed Reflection of Service)공격

  • 공격자는 출발지 IP를 공격대상 IP로 위조하여 다수의 반사 서버로 요청을 전송, 공격 대상자는 반사 서버로부터 다량의 응답을 받아서 서비스 거부(DoS)가 되는 공격

[1] DRDoS 공격절차

순서 공격 절차 설명
1 출발지 IP 변조 공격자는 출발지 IP를 공격 대상자 IP로 Spoofing 하여 SYN 패킷을 공격 경유지 서버로 전송
2 공격 대상자 서버로 응답 SYN 패킷을 받은 경유지 서버는 Spoofing 된 IP(공격 대상자 서버)로 SYN/ACK 패킷을 전송
3 서비스 거부 공격 대상자 서버는 수많은 SYN/ACK를 받게 되어 서비스 거부가 됨

 

[2] DRDoS 대응방안

 

  • ISP(인터넷 서비스 사업자)가 직접 차단
  • 반사 서버에서 연결을 완료하지 않은 SYN 출처 IP를 조사하여 블랙 리스트로 운용, 공격 서버를 사전에 차단
  • 공격대상이 되고 있는 공격대상 서버 IP와 Port를 변경, 필터링하여 운영

(5) 세션 하이재킹(Session Hijacking)

 

  • 케빈 미트닉이 사용했던 공격 방법 중 하나로 TCP의 세션 관리 취약점을 이용한 공격기법

[1] 세션하이재킹의 탐지방법

 

  • 비동기화 상태 탐지
  • ACK 패킷 비율 모니터링
  • 특정 세션에서 패킷 유실 및 재전송이 증가되는 것을 탐지
  • 기대하지 않은 접속의 리셋 탐지

(6) 애플리케이션 공격

 

  • 애플리케이션 공격은 HTTP와 관련된 공격이 주를 이룸
공격기법 설명
HTTP GET
플러딩
(Flooding)


Cache Control Attack 공격

과도한 Get 메세지를 이용하여 웹 서버의 과부하를 유발시키는 공격

HTTP 캐시 옵션을 조작하여 캐싱 서버가 아닌 웹 서버가 직접 처리하도록 유도, 웹 서버 자원을 소진시키는 서비스 거부 공격
Slowloris
(Slow HTTP
Header DoS)
HTTP GET 메서드를 사용하여 헤더의 최종 끝을 알리는 개행 문자열인 \r\n\r\n(16진수로 0d 0a 0d 0a)을 전송하지 않고, \r\n만 전송하여 대상 웹 서버와 연결상태를 장시간 지속시키고 연결 자원을 모두 소진시키는 서비스 거부 공격
RUDY Attack
(Slow HTTP
POST DoS)
요청 헤더의 Content-Length를 비정상적으로 크게 설정하여 메세지 바디 부분을 매우 소량으로 보내 계속 연결상태를 유지시키는 공격

ex) Content-Length: 9999999 설정 이후 1바이트씩 전송하여 연결 유지
Slow Read
Attack
TCP 윈도 크기(Window Size)를 낮게 설정하여 서버로 전달하고, 해당 윈도 크기를 기준으로 통신하면서 데이터 전송이 완료 될 때까지 연결을 유지하게 만들어 서버의 연결 자원을 고갈시키는 공격
Hulk DoS 공격자가 공격대상 웹 사이트 웹 페이지 주소(URL)를 지속적으로 변경하면서 다량으로 GET 요청을 발생시키는 서비스 거부 공격

주소(URL)를 지속적으로 변경시키는 이유는 임계치 기반의 디도스 대응 장비를 우회하기 위한 방법임
Hash DoS 공격자가 HTTP POST 메서드를 사용하여 많은 수의 파라미터를 서버에 전달하면, 파라미터를 관리하는 해시테이블에서 해시 충돌이 발생하도록 하여 서버의 자원을 고갈시키는 공격

 

[1] 애플리케이션 공객 대응 방안

 

  • 동시 연결에 대한 입계치(Threshold) 설정을 통해 차단
  • 연결, 읽기 타임아웃 설정을 통해 차단

(7) 네트워크 공격

 

공격기법 설명
스니핑 (Sniffing) 공격대상에게 직접 공격을 하지 않고 데이터만 몰래 들여다보는 수동적 공격 기법
네트워크 스캐너(Scanner),
스니퍼(Sniffer)
네트워크 하드웨어 및 소프트웨어 구성의 취약점 파악을 위해 공격자가 취약점을 탐색하는 공격 도구
패스워드 크래킹
(Password Cracking)
사전(Dictionary) 크래킹
 - 시스템 또는 서비스의 ID와 패스워드를 크랙하기 위해서 ID와 패스워드가 될 가능성이 있는 단어를 파일로 만들어 놓고 이 파일의 단어를 대입하여 크랙하는 공격기법
무차별(Brute Force) 크래킹
 - 패스워드로 사용될 수 있는 영문자(대소문자), 숫자, 특수문자 등을 무작위로 패스워드 자리에 대입하여 패스워드를 알아내는 공격기법
패스워드 하이브리드 공격(Password Hybrid Attack)
 - 사전 공격과 무차별 공격을 결합하여 공격하는 기법
레인보우 테이블 공격(Rainbow Table Attack)
 - 패스워드 별로 해시 값을 미리 생성해서 테이블에 모아놓고, 크래킹 하고자 하는 해시 값을 테이블에서 검색해서 역으로 패스워드를 찾는 공격 기법
IP 스푸핑(IP Spoofing) 침입자가 인증된 컴퓨팅 시스템인 것처럼 속여서 타깃 시스템의 정보를 빼내기 위해서 본인의 패킷 헤더를 인증된 호스트의 IP 어드레스로 위조하여 타깃에 전송하는 공격기법
ARP 스푸핑
(ARP Spoofing)
공격자가 특정 호스트의 MAC 주소를 자신의 MAC 주소로 위조한 ARP Reply를 만들어 희생자에게 지속적으로 전송하여 희생자의 ARP Cache Table에 특정 호스트의 MAC 정보를 공격자의 MAC 정보로 변경, 희생자로부터 특정 호스트로 나가는 패킷을 공격자가 스니핑하는 공격기법
ICMP Redirect 공격 3계층에서 스니핑 시스템을 네트워크에 존재하는 또 다른 라우터라고 알림으로써 패킷의 흐름을 바꾸는 공격기법
ICMP Redirect 메시지를 공격자가 원하는 형태로 만들어서 특정 목적지로 가는 패킷을 공격자가 스니핑하는 공격기법
트로이 목마
(Trojan Horses)
악성 루틴이 숨어 있는 프로그램으로 겉보기에는 정상적인 프로그램으로 보이지만 실행하면 악성 코드를 실행하는 프로그램

 

[1]  네트워크 서비스 공격 대응 방안

 

  • 방화벽, 침입 차단 시스템 등 네트워크 보안 장비를 통해 방어
  • 네트워크 접속 차단 시스템을 통해 방어
  • 내부 호스트 및 시스템의 악성 코드 감염 방지를 위한 백신 설치 등을 통해 방어

 

(8) 시스템 보안 위혐

 

[1-1] 버퍼 오버플로 (Buffer Overflow) 공격

 

  • 메모리에 할당된 버퍼 크기를 초과하는 양의 데이터를 입력하여 이로 인해 프로세스의 흐름을 변경시켜서 악성 코드를 실행시키는 공격기법
유형 설명
스택 버퍼 오버플로
(Stack Buffer
Overflow) 공격
메모리 영역 중 Local Value나 함수의 Return Address가 저장되는 스택 영역에서 발생하는 오버 플로 공격

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

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

 

[1-2] 버퍼 오버플로 공격 대응 방안

대응 방안 설명
스택 가드 활용
(Stackguard)
카나리(Canary)라고 불리는 무결성 체크용 값을 복귀 주소와 변수 사이에 삽입해 두고, 버퍼 오버플로 발생 시 카나리 값을 체크하여 변할 경우 복귀 주소를 호출하지 않는 방식으로 대응
스택 쉴드 활용
(Stack Shield)
함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장해 두고, 함수 종료 시 저장된 값과 스택의 RET 값을 비교해서 다를 경우 오버플로로 간주하고 프로그램 실행을 중단
ASLR(Address
Space Layout
Randomization) 활용
메모리 공격을 방어하기 위해 주소 공간 배치를 난수화 하고 실행 시마다 메모리 주소를 변경시켜 버퍼 오버플로를 통한 특정 주소 호출을 차단

리눅스에서 설정 가능
안전한 함수 활용 버퍼 오버플로에 취약한 함수
 - strcat(), strspy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprinf()

버퍼 오버플로에 안전한 함수
 - strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf()

 

[2-1] 백도어(Backdoor)

 

  • 어떤 제품이나 컴퓨터 시스템, 암호시스템 혹은 알고리즘에서 정상적인 인증 절차를 우회하는 기법
  • 어떤 고정된 형태가 있는 것은 아니라 프로그램 일부로 감춰져 있을 수도 있고 독자적인 프로그램이나 하드웨어 모습을 갖기도 함
  • 해커는 백도어를 통해서 이용자 몰래 컴퓨터에 접속하여 악의적인 행위를 하기도 함
  • 백도어 탐지기법
탐지기법 설명
프로세스 및 열린 포트 확인 TCPView로 열린 포트를 확인하고 백도어 탐지

리눅스에서는 ps -ef 명령어(동작 중인 프로세스 확인), netstat -an(열린 포트 확인)를 통해 백도어 확인
Setuid 파일 검사 새로 생성된 Setuid 파일이나 변경된 파일 확인을 통해 백도어 탐지
백신 및 백도어 탐지 툴 활용 백신 프로그램 및 백도어 탐지 툴을 이용해서 의심 프로그램 및 백도어 유무 검출
무결성 검사 리눅스에서 Tripwire 툴을 이용한 무결성 검사 실시
No such file or directory 라는 메세지가 출력되면 정상
로그 분석 wtmp, secure, lastlog, pacct, history, messages 사용하여 로그 분석 후 백도어 탐지