* 소프트웨어 개발 보안 설계:

요구사항 분석 - 설계 - 구현 - 테스트 - 유지보수

 

*소프트웨어 개발 보안 요소:

- 기밀성 Confidentiality :

  • 정보가 전송 중 노출되더라도 데이터를 읽을 수 없음.
  • 시스템 내의 자원은 인가된 사용자에게만 접근 허용

- 가용성 Availability:

  • 권한을 가진 사용자나 애플리케이션의 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성

- 무결성 Integrity:

  • 정당한 방법을 따르지 않고선 데이터가 변경될 수 없음
  • 데이터의 정확성 및 완전성, 고의/악의로 변경되거나 훼손 또는 파괴되지 않음

 

* SW 개발 보안 용어:

- 자산 Asset : 서버의 하드웨어, 기업의 중요 데이터.

- 위협 Threat : 해킹, 삭제, 자산의 불법적 유출, 위/변조, 파손

- 취약점 Vulnerability: 평문전송, 입력값 미검증, 비밀번호 공유

- 위험 Risk : 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성

 

* 입력데이터 검증 및 표현: 입력데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들

 

* 공격기법 이해

1. DoS (Denial of Service) 서비스 거부 공격

: 대량의 데이터를 한 곳의 서버에 집중적으로 전송함으로써 서버의 정상적인 기능을 방해

 

 - Dos 공격의 종류: 

SYN 플러딩 SYN Flooding - TCP 프로토콜의 구조적 문제를 이용한 공격
- 서버의 동시 가용 사용자 수를 SYN 패킷만 보내 점유하여 다른 사용자가 서버 사용을 불가능하게 하는 공격
- 3-way-handshake 과정을 의도적으로 중단시킴
UDP 플러딩 UDP Flooding - 대량의 UDP패킷을 만들어 임의의 포트 번호로 전송하여 응답메시지 ICMP를 생성하게 하여 자원 고갈
- ICMP 패킷은 변조되어 공격자에게 전달되지 않아 대기
스머프/스머핑 Smurf(ing) - 출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체에 ICMP Echo 패킷을 직접 브로드캐스팅 하여 마비
- 바운스 사이트라고 불리는 제3의 사이트를 이용해서 공격
- 대비책: 각 네트워크 라우터에서 브로드캐스트 주소를 사용할 수 없게 미리 설정
죽음의 핑 Ping of Death - 패킷의 크기를 인터넷 프로토콜 허용 범위 이상으로 전송하여 네트워크를 마비 시킴
- 수신 측에서는 단편화된 패킷을 처리하는 과정에서 많은 부하, 재조합 버퍼의 오버플로우가 발생하여 서비스 불가능
랜드어택 Land Attack - 출발지의 IP와 목적지 IP를 같은 패킷 주소로 만들어 보냄
- 수신자가 자기 자신에게 무한으로 응답을 보내도록 하는 공격.
- 대비책: 송신 IP 주소와 수신 IP 주소의 적절성 검사
티어 드롭 Tear Drop - IP 패킷의 재조합 과정에서 잘못된 Fragment Offset 값을 전송
- 수신측에서 패킷을 재조합하는 과정에서 과부하, 오류 발생.
봉크/ 보잉크 Bonk/Boink - 프로토콜의 오류 제어를 이용한 방법으로 시스템의 패킷 재전송과 재조립이 과부하 유발.
ex) 봉크: 같은 시퀀스 번호를 계속 보냄
      보잉크: 일정한 간격으로 시퀀스 번호에 빈 공간 생성
핑 플로드 Ping Flood - 특정 사이트에 많은 ICMP Echo를 보내면 응답을 하기위해 시스템 자원을 고갈시켜 시스템 정상가동을 방해.

 

2. DDoS(Distributed DoS) 공격

: DoS 공격을 여러대의 공격자로 분산 배치하여 동시 동작하도록 특정 사이트 공격

 

- DDoS 공격 구성요소:

  • 핸들러 Handler - 마스터 시스템의 역할을 수행하는 프로그램
  • 에이전트 Agent - 공격 대상에 직접 공격을 가하는 시스템
  • 마스터 Master - 공격자에게 직접 명령하는 시스템. 여러대의 에이전트를 관리.
  • 공격자 Attacker - 공격을 주도하는 해커의 컴퓨터
  • 데몬 프로그램 Daemon - 에이전트 시스템의 역할을 수행하는 프로그램

- DDoS 공격 도구:

  • Trin00: 가장 초기 형태 데몬으로 UDP Flooding 공격을 수행. 몇개의 마스터들과 많은 수의 데몬들로 구성.
  • TFN (Tribe Flood Network): UDP Flooding, TCP SYN Flooding 공격, ICMP 응답요청, 스머핑 공격 등을 수행.
  • Stacheldraht : 공격자, 마스터, 에이전트가 쉽게 노출되지 않도록 암호화된 통신 수행

 

- DDoS 공격 대응방안:

  • 차단 정책 업데이트
  • 좀비PC IP 확보 : IP 위변조 여부 확인
  • 보안 솔루션 운영: 방화벽, 침입탐지 시스템 등
  • 홈페이지 보안 관리: 모의해킹등을 수행하여 보안 유지
  • 시스템 패치: 시스템 취약점 패치

 

3. DRDoS (Distributed Reflection DoS) 공격

: 공격자가 출발지 IP를 공격 대상 IP로 위조하여 다수의 반사 서버로 요청 정보를 전송하고 공격 대상자는 반사 서버로부터의 다량 응답을 받아 서비스 거부 상태가 되는 공격.

 

- DRDoS 대응방안

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

 

4. 애플리케이션 공격 종류

HTTP GET 플러딩 - Cache Control Attack 공격
- 과도한 GET 메시지를 이용해 웹 서버의 과부하 유도
- HTTP 캐시 옵션을 조작하여 캐싱 서버가 아닌 웹 서버가 처리하도록 유도
Slowloris (Slow HTTP Header DoS) - HTTP GET 메서드를 사용하여 헤더의 끝 문자열이 아닌 \r\n(Hex: 0d 0a)만 전송하여 연결상태 유지
RUDY (Slow HTTP POST DoS) - 요청 헤더의 Content-Length를 비정상적으로 크게 설정, 메시지 바디 부분은 소량으로 보내 연결 상태를 유지
Slow HTTP Read DoS - TCP 윈도 크기와 데이터 처리율을 감소시킨 상태에서 다수 HTTP 패킷을 지속적으로 전송하여 대상 웹 서버의 연결상태 장시간 지속
Hulk DoS - 공격자가 공격대상 웹 사이트 웹 페이지 주소(URL)을 지속적으로 변경하며 다량으로 GET 요청
Hash DoS - 많은 수의 파라미터를 POST 방식으로 웹 서버로 전달하여 다수의 해시 충돌 유도

 

 

5. 네트워크 서비스 공격 종류

네트워크 스캐너(Scanner),
스니퍼(Sniffer)
- 네트워크 하드웨어 및 소프트웨어 구성의 취약점 파악을 위해 공격자가 사용하는 도구
패스워드 크래킹
(Password Cracking)
- 사전(Dictionary) 크래킹:
ID와 패스워드가 될 가능성이 있는 단어를 파일로 만들어놓고 대입

- 무차별 크래킹 (Brite Force):
패스워드로 사용될 수 있는 문자들을 무작위로 대입

- 패스워드 하이브리드(Password Hybrid Attack)
사전 공격과 무차별 대입공격을 결합하여 공격

- 레인보우 테이블 공격 (Rainbow Table Attack):
패스워드별로 해시값을 미리 생성해서 테이블에 저장, 크래킹 하려는 해시값을 테이블에서 검색하여 역으로 패스워드를 찾는 기법
IP 스푸핑 (IP Spoofing) - 서버에 대한 인증되지 않은 액세스 권한을 입수하는데 사용하는 기법
- 침입자가 패킷 헤더 수정을 통해 인증된 호스트의 IP 어드레스 위조
- 타깃 서버로 메시지 발송 후 패킷은 유입된것처럼 표시
ARP 스푸핑 (ARP Spoofing) - 공격자가 특정 대상의 물리적 주소(MAC)를 자신의 주소로 위조한 ARP Reply를 만들어 희생자에게 지속적으로 전송.
- 희생자의 ARP Cache table에 특정 호스트의 MAC 정보를 공격자의 MAC 정보로 변경

ICMP Redirect 공격 - 3계층에서 스니핑 시스템을 네트워크에 존재하는 또 다른 라우터라고 알림으로써 패킷의 흐름 변경
- ICMP Redirect 메시지를 공격자가 원하는 형태로 변경, 특정 목적지로 가는 패킷을 스니핑하는 기법
세션 하이재킹 (Session Hijacking) - 케빈 미트닉이 사용했던 공격 방법 중 하나로 TCP의 세션 관리 취약점을 이용한 공격 기법

 

 

6. 시스템 보안 위협

 

시스템 보안 공격 기법 설명 탐지 / 대응 방안
버퍼 오버플로우(Buffer Overflow) 공격  메모리에 할당된 버퍼 크기를 초과하는 양의 데이터를 입력하여 프로세스 흐름을 변경시켜 악성 코드 실행

* 스택 버퍼 오버플로우 공격:
- 메모리 영역 중 Local Value나 함수의 Return Address가 저장되는 스택 영역에서 발생.
- 스택 영역에 할당된 버퍼 크기를 초과하는 데이터를 입력, 복귀주소를 변경하여 공격자가 원하는 임의의 코드 실행 공격

* 힙 버퍼 오버플로우 공격:
- 프로그램 실행 시 동적으로 할당되는 힙 영역의 버퍼 크기를 초과하는 데이터를 실행하여 메모리 데이터, 함수 주소등을 변경, 공격자가 원하는 임의의 코드 실행 공격
- 인접한 메모리(Linked-list)의 데이터가 삭제될 수 있고 포인터 주소를 악용하여 관리자 권한 파일에 접근

- 스택가드(Stack Guard) 활용:
카나리(Canary)로 불리는 무결성 체크용 값을 두고 버퍼 오버플로우 발생 시 카나리 값 체크

- 스택 쉴드(Stack Shield) 활용:
함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장, 함수 종료시 저장된 값과 스택의 RET 값을 비교해 다를 경우 프로그램 실행 중단

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

- 안전한 함수 활용:
ex) strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf()
백도어 (Backdoor) - 암호시스템 혹은 알고리즘에서 정상적인 절차를 우회하는 기법.
- 허가받지 않고 시스템에 접속하는 권리 취득
- 고정된 형태가 아니라 프로그램 일부 혹은 독자적인 프로그램이나 하드웨어일 수 있다.
- 프로세스 및 열린 포트 확인:
TCPView로 열린 포트를 확인하고 백도어 탐지. 리눅스에서 ps -ef (동작 중인 프로세스 확인), Netstat -an(열린 포트 확인)을 통해 백도어 확인

- SetUid 파일 검사:
새로 생성된 SetUid 파일이나 변경된 파일 확인을 통해 감지

- 백신 및 백도어 탐지 툴 활용

- 무결성 검사
: 리눅스에서 Tripwire 툴을 이용한 무결성 검사 실시. "No such file or directory"메시지 출력시 정상

- 로그분석
:
wtmp, secure, lastlog, paccot, history, messages 사용하여 로그 분석 후 탐지
포맷 스트링 공격 
(Format String Attack)
- 포맷 스트링을 인자로 하는 함수의 취약점을 이용한 공격. 외부로부터 입력된 값을 검증없이 입출력 함수의 포맷 스트링을 그대로 사용하는 경우 발생하는 취약점 공격 기법
- Printf(argv[1]) 을 포맷 스트링을 인자로 하는 함수 사용 시 포맷 스트링을 지정하지 않고 사용자 입력값을 통해 메모리 내용을 참조하거나 특정 영역의 값을 변경 가능
 
레이스 컨디션 공격
(Race Condition Attack)
- 레이스 컨디션은 둘 이상의 프로세스나 스레드가 공유자원을 동시에 접근할 때 접근 순서에 따라 비정상적인 결과가 발생하는 조건/ 상황
- 프로세스가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행중에 끼어들어 임시파일을 심볼릭 링크하여 악의적인 행위 수행을 유도
 
키로거 공격
(Key Logger Attack)
- 컴퓨터 사용자의 키보드 움직임을 탐지하여 개인 정보를 빼가는 해킹 공격
- 키보드 활동을 기록하는 것을 키로깅 / 키스트로크 로킹 이라고 함
 
루트킷 (Rootkit) - 시스템 침입 후 백도어, 트로이 목마 설치, 원격 접근, 내부 사용 흔적 삭제, 관리자 권한 획득 등 주로 불법적인 해킹에 사용되는 기능 제공 프로그램 모음  

 

 

 

7.  보안 공격 기법

피싱 (Fishing) 소셜 네트워크에서 지인, 특정 유명인으로 가장하여 불특정 다수의 정보 탈취
스피어 피싱 (Spear Phishing) 특정 대상을 선정한 후 일반적 이메일로 위장한 메일을 지속적으로 발송, 클릭을 유도하여 사용자의 개인정보 탈취
큐싱 (Qshing) - 큐알코드를 통해 악성 앱을 내려받도록 유도, 금융 정보 등을 빼내는 피싱공격
- 제로페이 확산에 따라 피해 증가
스미싱 (Smishing) - SMS와 피싱의 합성어
- 신뢰할 수 있는 사람/기업처럼 가장하여 개인 정보, 결제를 유도하는 공격
애드웨어 (Adware) 특정 소프트웨어를 실행, 설치 후 자동적으로 광고가 표시되는 프로그램
웜 (Worm) - 스스로를 복제하여 전파하는 악성 소프트웨어 프로그램
- 바이러스와 달리 웜은 독자적으로 실행된다.
악성 봇 (Malicious Bot) - 해커의 명령에 의해 원격에서 제어/실행 가능한 프로그램 혹은 코드
- 스팸 메일 정송이나 DDoS에 활용
- '좀비PC'는 악성 봇에 의해 감염된 PC
봇넷 (Botnet) 악성 프로그램에 감염되어 이용될 수 있는 다수의 컴퓨터들이 네트워크로 연결된 상태
랜섬웨어 (Ransomware ) Snake, Darkside 등 시스템을 잠그거나 데이터를 암호화해 사용할 수 없도록 만들고 이를 인질로 금전 요구
논리 폭탄 (Logic Bomb) 특정 날짜,시간 등 조건 충족시 악의적인 기능을 유발할 수 있게 만든 코드의 일부로 소프트웨어 시스템에 의도적으로 삽입된 악성 코드
APT 공격 (Advanced Persistent Threat) 특정 타깃을 목표로 다양한 수단을 통한 지속적이고 지능적인 맞춤형 공격
공급망 공격 (Supply Chain Attack) - 소프트웨어 개발사의 네트워크에 침투, 코드 삽입 혹은 파일 변경으로 사용자 PC에 소프트웨어를 설치, 업데이트 시 감염되도록 하는 공격
제로데이 공격 (Zero Day Attack ) - 보안 취약점이 발견되어 공표 전 해당 취약점을 악용하는 공격
- 공격의 신속성을 의미. 대응책이 공표되기 전에 공격하는 것이라 대응책이 없다
이블 트윈 공격 (Evil Twin Attack) 무선 wifi 피싱기법으로 wifi 제공자처럼 행세하며 핫스팟에 연결한 무선 사용자들의 정보를 탈취
사이버불링 (Cyberbullying) 인터넷 관련 공간에서 특정인을 집단적으로 따돌리거나 집요하게 괴롭히는 행위
트로이 목마 (Trojan Horses) 겉보기엔 정상적인 프로그램으로 보이지만 실행하면 악성코드 실행

 

* 보안 방어 기법

- 사이버 킬체인 (Cyber Kill Chain)

: 록히드 마틴의 사이버 킬체인은 7단계 프로세스별 공격분석 및 대응을 체계화한 APT 방어 분석 모델

 

- 난독화 (Obfuscation)

: 코드의 가독성을 낮춰 역공학에 대한 대비를 위해 코드 일부, 혹은 전체를 변경.

 

 

* 개발 보안을 위한 암호화 알고리즘

- 대칭 키 암호방식: 암호화와 복호화에 같은 암호키를 사용.

  • 블록 암호 방식: 고정 길이의 블록을 암호화. ex) DES, AES, SEED
  • 스트림 암호 방식: 긴 주기의 난수열을 발생시켜 평문과 더물어 암호문 생성. ex) RC4

- 비대칭 키 암호방식: 공개 키, 개인 키가 존재하며 공개키는 누구나 알 수 있지만 개인키는 소유자만 알 수 있어야함.

 

 

- 해시 방식: 단방향 알고리즘으로서 임의의 데이터를 고정된 길의의 데이터로 매핑하는 함수.

원본 데이터를 유추하기 어려운 것을 이용. 연산 시간이 빠르다.

ex) SHA, MD5

 

 

* 시큐어 코딩: 잼재적인 보안 취약점을 사전에 제거하고 보안 요소들을 고려하며 개발하는 기법

 

* 시큐어 코딩 가이드

- 입력 데이터 검증 및 표현

- 보안 기능

- 시간 및 상태

- 에러 처리

- 코드 오류

- 캡슐화

- API 오용

 

 

 

* 입력데이터 검증 및 표현

보안 약점 설명 대응방안
SQL삽입 ( SQL Injection )
  • 웹 응용 프로그램에 SQL을 삽입하여 내부 데이터베이스 서버의 데이터를 유출 및 변조하고 관리자 인증을 우회하는 보안 약점
동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지
경로 조작 및 자원 삽입
  • 데이터 입출력 경로를 조작하여 서버 자원을 수정/삭제가 가능
  • 외부 입력 값의 사전검증 부재, 잘못 처리된 경우
  • 사용자 입력값을 식별자로 사용
  • 경로 순회 공격 위험이 있는 문자(" / \ ) 제거 필터 사용
크로스 사이트 스크립트 (XSS)
  • 검증되지 않은 외부 입력값에 의해 브라우저에서 악의적 코드 실행
  • 웹 페이지에 악의적 스크립트 삽입하여 방문자 정보 탈취 및 비정상적인 기능 수행
HTML 태그 사용을 제한, 혹은 < , > , & 등의 문자를 다른 문자로 치환
운영체제 명령어 삽입
  • 운영체제 명령어 파라미터 입력값을 필터없이 사용될 때 악용 가능
  • 외부 입력값을 통해 시스템 명령어 실행 유도
웹 인터페이스를 통해 시스템 명령어 전달 방지.
위험한 형식 파일 업로드
  • 악의적인 명령어가 포함된 스크립트 파일 업로드, 시스템에 손상을 주거나 제어 가능
업로드 되는 파일의 확장자 제한, 파일명의 암호화, 웹사이트 파일 서버의 경로 분리, 실행 속성 제거 
신뢰하지 않는 URL주소로 자동접속 연결
  • 입력 값으로 사이트 주소를 받는 경우 방문자를 피싱 사이트로 유도
 연결되는 외부 사이트의 주소를 화이트 리스트로 관리함으로써 방지

 

* 취약점 분석/평가:

- 취약점 분석/평가 계획 수립 - 취약점 분석/평가 대상 선별 - 취약점 분석 수행 - 취약점 평가 수행

 

* 보안 인증: 로그인을 요청한 사용자의 정보를 확인하고 접근 권한을 검증하는 보안 절차.

 

* 보안 인증의 유형

- 지식 기반 인증: password, Passphrase, 아이핀

- 소유 기반 인증: 신분증, 토큰, 스마트카드, OTP

- 생체 기반 인증: 지문, 얼굴, 음성, 홍채

- 위치 기반 인증: 콜백, GPS나 IP주소

- 특징(행위)기반 인증: 서명, 동작

 

* 접근 통제: 데이터가 저장된 객체와 사용하려는 주체 사이의 정보흐름 제한

 

* 접근 통제 기법

- 식별(Identification): 인증 서비스에 스스로를 확인시키기 위해 정보를 공급하는 주체활동

- 인증(Authentication): 주체의 신원을 검증하기 위함

- 인가(Authorization): 인증을 통해 식별된 주체에게 접근을 허용하는 활동

- 책임추적성(Accountability): 주체의 접근을 추적하고 행동을 기록하는 활동

 

* 접근 통제 유형:

 

- 임의적 접근통제 (DAC)

: 사용자/ 그룹 신분 기반으로 접근 제한. 정보의 소유자가 보안 레벨을 결정, 이에 대한 정보의 접근 제어를 설정. 

유연한 접근 제어 서비스 제공. 객체별로 세분된 접근제어 가능

 

- 강제적 접근통제 (MAC)

:  주체가 갖는 접근 허가 권한에 근거하여 접근 제한. 시스템 정보의 허용 등급을 기준으로 제한. 중앙에서 정보를 수집, 분류하여 보안레벨 결정. 정책적으로 접근 제어 수행. 

기밀성이 중요한 조직에서 사용.

 

- 역할 기반 접근 통제 (RBAC)

: 중앙 관리자가 조직 내 맡은 역할에 기초하여 접근 제한. 직책에 대해 권한을 부여해서 효율적인 권한 관리 가능

 

 

* 보안 솔루션: 외부로부터의 불법적인 침입을 막는 기술 및 시스템

 

- 방화벽 (Firewall): 내부의 네트워크와 인터넷 간에 전송되는 정보를 선별하여 수용/거부/수정하는 기능을 가진 침입 차단 시스템

 

- 침입 탐지 시스템(IDS; Intrusion Detection System): 컴퓨터 시스템의 비정상적인 사용, 오용, 남용 등을 실시간으로 탐지하는 시스템.

  • 오용 탐지(Misuse Detection): 미리 입력해둔 공격 패턴이 감지되면 알려준다.
  • 이상 탐지(Anomaly Detection): 비정상적인 행위나 자원의 사용이 감지되면 알려준다.

- 침입 방지 시스템(IPS; Intrusion Prevention System)

: 비정상적인 트래픽을 능동적으로 차단, 격리하는 보안 솔루션.

방화벽과 침입탐지 시스템을 결합한 것. 패킷을 하나씩 검사 후 비정상적인 패킷이 탐지되면 방화벽 기능으로 차단.

 

- 데이터 유출 방지(DLP; Data Leakage/Loss Prevention)

: 내부 정보의 외부 유출을 방지하는 보안 솔루션

PC와 네트워크상의 모든 정보를 검색하고 행위를 탐지,통제하여 유출을 사전 방지

 

- 웹 방화벽(Web Firewall)

: 웹 기반 공격을 방어할 목적으로 만들어진 특화된 방화벽. 웹 관련 공격을 감시하고 서버에 도달하기 전에 차단.

 

- VPN(Virtual Private Network, 가상 사설 통신망)

: 공중 네트워크와 암호화 기술을 이용하여 사용자가 자신의 전용 회선을 사용하는 것 처럼 도와주는 보안 솔루션.

비용 부담을 줄일 수 있으며 지역적 제한이 없다.

 

- NAC(Network Access Control)

: 네트워크에 접속하는 내부 PC의 일관된 보안 관리 기능을 제공하는 보안 솔루션

 

- EMS(Enterprise Security Management)

: 로그 및 보안 이벤트를 통합하여 관리하는 보안 솔루션. 보안 솔루션간 상호 연동을 통해 종합적 보안 관리 체계 수립 가능.

 

 

 

+ Recent posts