Secure SDLC
- 안전한 소프트웨어를 개발하기 위한 보안 강화 프로세스
- cf. 소프트웨어 개발 생명 주기(SDLC, Software Development Life Cycle)
- 대표적인 방법론
- CLASP : 개발 초기 단계에서 보안을 강화하는 방법론
- SDL : 마이크로소프트 사에서 기존의 SDLC를 개선한 방법론
- Seven Touchpoints: 소프트웨어 보안의 모범사례를 통합한 방법론
- 소프트웨어 개발 보안 요소
- 기밀성(Confidentility) : 인가된 사용자만 접근 허용
- 무결성(Integrity) : 인가된 사용자만 수정 허용
- 가용성(Availability) : 인가받은 사용자는 언제든지 사용 가능
- 인증(Authorization) : 합법적인 사용자인지 확인하는 행위
- 부인 방지(NonRepudiation) : 송수신한 사실에 대한 증거 제공
- cf. 보안의 3대 요소: 기밀성, 무결성, 가용성
- 시큐어 코딩(Secure Coding)
- 구현 단계에서 보안 요소들을 고려하여 코드 작성
- 사전 대응으로 안정성과 신뢰성 확보
보안 관리 종류
- 세션 통제
- 세션 연결과 연결로 인해 발생하는 정보 관리
- 종류
- 불충분한 세션 관리 : 일정 규칙이 있는 세션 ID 발급, 긴 타임아웃 등
- 잘못된 세션에 의한 정보 노출: 다중 스레드(Multi-Thread) 환경
- 입출력 데이터
- 입력 데이터로 인해 발생하는 문제 예방과 보안 점검
- 종류
- SQL Injection(삽입): 웹 애플리케이션에 악의적인 SQL을 삽입하여 내부 데이터를 유출 및 변조함
- 크로스사이트 스크립팅(XSS): 원치 않는 사이트로 접속을 유도하여 부적절한 스크립트를 실행시켜 정보를 탈취하거나 비정상적인 기능 수행을 유발함
- 사이트 간 요청위조(CSRF): 공격자가 의도한 행위를 웹사이트에 요청하게 하는 공격
- 버퍼 오퍼플로우: 할당된 메모리 범위를 넘는 위치에서 데이터 입출력할 때 발생하는 보안 약점
- 버퍼 오퍼플로우 대응 방안
- 스택 가드(Stack Guard): 카나리 무결성 체크용 복귀 주소 체크
- 복귀 주소와 변수 사이에 특정한 값을 저장하고 그 값이 변경되는 경우 실행 중단
- 스택 쉴드(Stack Shield): Global RET 특수 스택 비교
- ASLR(Address Space Layout Randomization): 주소 공간 배치 난수화
- 코드 오류
- 널 포인터(Null Pointer) 역참조
- 널 포인터가 가리키는 메모리 위치에 값을 저장할 때 발생하는 보안 약점
- API 오용
- DNS Lookup
- 도메인명에 의존하여 인증이나 접근통제 등의 보안 결정을 내리는 경우 발생하는 약점
암호 알고리즘
- 중요한 개인 정보 등을 보호하기 위해 평문을 암호화된 문장으로 만드는 방법
- 암호 방식 분류
- 양방향: 개인키(Stream, Block), 공개키
- 단방향: Hash
- 개인키 암호화 기법(Private Key Encryption)
- 동일한 암호화 키와 복호화 키 사용하는 기법
- 대칭 암호 기법, 단일키 암호화 기법
- 속도가 빠르지만 관리하는 키의 수가 많음
- 종류
- 스트림 암호화 기법: 하나의 비트 단위 암호화
- RC4
- 랜덤 치환에 기초한 알고리즘, 8~16번 연산 필요
- RC5
- 블록 크기 32/64/128비트
- 라운드 0에서 255 가변적
- LFSR
- 블록 암호화 기법: 여러 개의 비트 단위(블록) 암호화
- SEED
- 1999년 한국인터넷진흥원 개발한 국내 표준
- 키 길이 128/256 2개 제공
- 16회 라운드를 거쳐 평문 2개 블록
- ARIA
- 2004년 국가정보원과 산학연합회 개발한 국내 표준
- 경량 환경 및 하드웨어 효율성 향상
- DES
- 64비트 블록 암호화
- 16 라운드
- DES 3번 적용(Triple DES)
- AES
- Rijdael(라인달)
- 미국 표준 기술 연구소(NIST), DES 보완한 미국 표준
- 128/192/256 키 길이 3개 제공
- 10/12/14 라운드 수 고정, 한 라운드는 4가지 계층 구성
- IDEA
- 스위스 연방 기술 기관에서 개발하고 PGP 채택
- 128비트 키를 사용하여 8라운드에 거쳐 64비트 암호문으로 만듦
- Skipjack
- 공개키 암호화 기법(Public Key Encryption)
- 암호화 키는 공개키(Public Key), 복호화 키는 비밀키(Secret Key)
- 비대칭 암호화 기법
- 관리하는 키의 수가 적지만, 속도가 느림
- 종류
- 소인수 분해: RSA, Rabin
- 이산대수 문제: EIGamal, DSA, Diffie-Hellman, ECC
- RSA
- 1978년 MIT 라이베스트/샤미르/애들먼 제안, 소인수분해 문제
- EIGamal
- 이산대수 문제의 어려움으로부터 안정성을 얻는 알고리즘
- ECC
- 타원 곡선 알고리즘
- 이산대수 문제 기반, RSA/EIGamal보다 사이즈 작고 효율적(모바일 환경)
- 해시(Hash)
- 임의 길이의 데이터나 메시지를 고정된 길이로 변환하는 것
- 일방향, 해시 함수
- 종류
- SHA 시리즈: 1993년 미국 국가안보국(NSA) 설계, 국립표준기술연구소(NIST) 발표, SHA-0/1/2/224/256/512
- MD5: 1991년 R.Rivest 고안, MD4 대체, 블록 크기 512비트, 키 길이 128비트
- N-NASH: 1989년 전신전화주식회사(NTT), 블록 크기와 키 길이 128비트
- SNEFRU: 1990년 R.C.Mercle, 32비트 프로세서에서 구현
서비스 공격 유형
- 서비스 거부(DoS, Denial of Service) 공격
- 표적 서버의 자원을 고갈시킬 목적으로 대량의 데이터를 집중적으로 전송하여 정상적인 기능을 방해하는 공격
- 종류
- 스머핑(Smurfing)/스머프(Smurf)
- 송신 주소를 공격 대상인 수신 대상지의 IP 주소로 위장하고 해당 네트워크 라우터의 브로드캐스트 주소로 패킷을 전송함
- 해당 네트워크 내의 모든 컴퓨터로 전송하고, 이에 대한 에코 응답 메시지를 공격 대상인 수신 주소로 집중 전송하여 네트워크 과부하 발생시킴
- 죽음의 핑(Ping of Death)
- 패킷의 크기를 허용 범위 이상을 전송하여 네트워크를 마비시키는 공격
- 서버는 다수의 분할된 IP 단편화(Fragment) 패킷을 수신하여 재조립하고 각각의 ICMP Ping 메시지에 대한 응답을 처리하기 위해 과부하 발생
- ICMP Ping: 특정 IP로 패킷이 전송될 때 현재 운영 중인 IP인지 확인 요청하여 에코 응답 메시지를 전송받음
- TearDrop
- 아주 큰 패킷을 분할한 Fragment Offset 값을 조작하여 전송하고 수신지에서 패킷 재조립 시 오류 발생시키는 공격
- Land Attack
- 패킷의 송신과 수신 IP 주소를 동일한 공격 대상의 IP 주소로 전송하여, 스스로에게 무한히 응답하게 하는 공격
- SYN Flooding
- 초기 연결 요청(SYN) 패킷을 반복적으로 전송하여, TCP의 3-Way-Handshake를 의도적으로 중단시키고 서버 대기 상태로 만드는 공격
- 3-Way-Handshake: 신뢰성 있는 연결을 위해 송신지와 수신지 사이에 'SYN'-'SYN+ACK'-'ACK' 패킷 확인 작업을 거침
- UDP Flooding
- 대량의 UDP패킷을 만들고 응답 메시지를 생성하게 하여 자원을 고갈시키는 공격
- ARP 스푸핑
- 자신의 MAC주소로 위조한 ARP REPLY를 지속 전송, 데이터 패킷을 중간에서 가로채는 공격 기법, 근거리만 가능
- DoS
- HTTP GET Flooding: 과도한 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 윈도 크기와 데이터 처리율을 감소시킨 상태에서(Zero Window Packet) 다수 HTTP 패킷을 지속적으로 전송하여 웹 서버의 연결 자원을 소진시키는 공격
- Hulk DoS: 공격대상 웹페이지 주소(URL)를 지속적으로 변경하면서 다량으로 GET요청을 발생시킴
- Hash DoS: 다수의 해시 충돌(Collision)을 발생시켜 자원을 소모시키는 공격
- DDoS(분산 서비스 거부, Dostributed Denial of Service)
- 여러 공격 지점에서 한 곳의 공격 대상인 서버를 공격함
- 분산 서비스 공격용 툴: 에이전스 역할을 하는 데몬(Daemon)
- Trinoo: UDP Flooding 공격
- TFN(Tribe Flood Network): TCP SYN Flood 공격, ICMP 응답 요청, 스머핑 공격 등을 수행
- TFN2K: TFN 확장판
- Stacheldraht: 암호화된 통신 수행
- 세션 하이재킹(TCP 세션 하이재킹)
- 세션 관리 취약점을 이용하여 RST 패킷을 통해 정상 연결을 종료 시킨 후 공격자에게 재연결시킴
네트워크 공격
- 스미싱(Smishing)
- 문자 메시지를 이용해 개인 정보를 탈취하는 수법
- 최근에는 앱 설치 파일로 유도하는 등으로 발전함
- 스피어 피싱(Spear Phishing)
- 특정 대상을 선정하여 위장 이메일이나 첨부파일 등을 지속적으로 발송하여 접속을 유도하는 공격
- APT(Advanced Persistent Threats, 지능형 지속 위협)
- 특정 기업이나 조직 네트워크에 침투해 보안을 무력화하거나 정보를 탈취하는 공격
- 스턱스넷(Stuxnet) 같은 악성코드가 담긴 디스크 전파, 감염된 P2P 사이트 전파 등
- 무작위 대입 공격(Brute Force Attack)
- 암호화된 암호키에 모든 값을 대입하여 공격하는 방식
- 큐싱(Qshing)
- QR 코드를 통해 악성 프로그램을 설치하도록 유도하는 기법
- 스니핑(Sniffing)
- 네트워크 중간에서 패킷 정보를 도청하는 등의 수동적 공격 기법
- 레이스 컨디션 공격(Race Condition Attack)
- 여러 스레드가 공유 자원에 동시에 접근할 때 발생하는 공격
정보 보안 침해 공격
- 좀비(Zombie) PC
- 악성코드에 감염되어 다른 프로그램이나 컴퓨터를 조종하는 컴퓨터
- C&C 서버(Command & Control)
- 해커가 원격지에서 좀비 PC에 명령을 내리고 악성코드를 제어하는 서버
- 봇넷(Botnet)
- 악성 프로그램에 감염되어 악의적으로 이용할 수 있는 컴퓨터들이 네트워크로 연결됨
- 웜(Worm)
- 네트워크를 통해 연속적으로 자신을 복제하여 시스템의 부하를 높이고 다운시키는 바이러스
- 분산 서비스 공격, 버퍼 오버플로우 공격, 슬래머 등
- 제로 데이 공격(Zero Day Attack)
- 보안 취약점이 알려지기 전에 공격하는 기법, 공격의 신속성
- 키로거 공격(Key Logger Attack)
- 키보드의 움직임을 탐지해 개인 정보 등을 탈취하는 해킹 공격
- 랜섬웨어(Ransomware)
- 사용자의 컴퓨터에 잠입해 내부 문서나 파일 등을 암호화하여 금품을 요구하는 소프트웨어
- 백도어(Back Door, Trap Door)
- 시스템 설계자나 작성자의 편의를 위해 보안이 없는 비밀 통로
- 루트킷(Rootkit)
- 차후 침입을 위한 백도어, 트로이목마, 원격 접근 등 불법적인 해킹에 사용되는 기능을 제공하는 프로그램 모음
- 크라임 웨어(Crimeware)
- 온라인 범죄와 같은 불법적인 행위를 수행하기 위해 제작된 프로그램
- 공격용 툴 킷(키로거, 스파이웨어 등이 속함)
- 트로이 목마(Trojan Horse)
- 정상적인 프로그램으로 위장하여 숨어 있다가 이후 활성화하여 공격하는 기법
- SQL 슬래머(Slammer)
- SQL 취약점을 이용하여 SQL 서버를 공격하는 웜 바이러스의 형태
- 공급망 공격(Supply Chain Attack)
- 소프트웨어 개발사의 네트워크에 침투하여 코드를 삽입하거나 변경하는 등의 공격기법
- 이블 트윈(Evil Twin)
- 무선 Wifi피싱 기법, 핫스팟에 연결한 무선 사용자들의 정보를 탈취
서버 인증
- 보안 서버
- 개인 정보를 암호화하여 송수신하는 서버
- 서버에 SSL(Secure Socket Layer) 인증서를 설치함
- SSL(Secure Sockets Layer): 데이터를 송수신하는 장비 사이에 위치하여 인증, 암호화, 무결성을 보장하는 업계 표준 프로토콜
- 인증(Authentication)
- 로그인을 요청한 사용자의 정보를 확인하고 접근 권한을 검증하는 보안 절차
- 주요 유형
- 지식 기반
- 패스워드, 패스 프레이즈(Passphrase), 아이핀(i-PIN) 등
- 소유 기반
- 신분증, 메모리 카드(토큰), 스마트 카드, OTP 등
- 생체 기반
- 행위 기반
- 위치 기반
- 보안 인증
- Subject(주체): 자원에 대한 접근 요청
- Object (객체): 접근 대상이 될 수 있는 아이템
- Access(접근): 주체와 객체 사이의 정보 흐름
- 접근 통제 절차
- Identification : 식별(1단계)
- Authentication: 인증(2단계)-검증 (EX.로그인)
- Authorization: 승인 혹은 인가(3단계)-허용
- Accountability/Accounting: 책임추적성(4단계)-행동추적,기록
- 정보 통제 보호 모델
- 벨-라파둘라: 기밀성, No Read Up-No Write Down
- 비바: 무결성, No Read Down-No Write Up
보안 솔루션
- 외부로부터 불법적인 침입을 막는 기술 및 시스템
- 주요 보안 솔루션
- 방화벽(Firewall)
- 침입 탐지 시스템(IDS, Intrusion Detection System)
- 시스템의 비정상적인 사용/오용/남용 등을 실시간으로 탐지하는 시스템
- 오용 탐지, 이상 탐지
- 침입 방지 시스템(IPS, Intrusion Prevention System)
- 비정상적인 트래픽을 능동적으로 차단하고 격리하는 시스템
- 데이터 유출 방지(DLP, Data Leakage/Loss Prevention)
- 웹 방화벽(Web Firewall)
- 일반 방화벽이 탐지하지 못하는 웹 기반 공격을 방어
- VPN(가상 사설 통신망)
- NAC(Network Access Control)
- 내부 PC의 MAC 주소를 IP 관리 시스템에 등록 후 일관된 보안 관리 기능 제공
- ESM(Enterprise Security Management)
- 로그 및 보안 이벤트를 통합하여 관리하는 보안 솔루션
- 방화벽, IDS, IPS 등을 통합하여 관리하여 비용 및 자원 절약
- Tripwire
- 크래커가 침입하여 시스템에 백도어를 만들어놓거나 설정을 변경할 경우 이를 감지하는 도구