소프트웨어 개발 보안 구축
Secure SDLC
- 소프트웨어의 유지 보수 단계에서 보안 이슈를 해결하기 위해 소모되는 많은 비용을 최소화하기 위해 등장
- 요구사항 분석, 설계, 구현, 테스트, 유지보수등 전체 단계에 걸쳐 수행되야할 보안 활동을 제시
SDLC
- 소프트웨어 개발 생명주기(SDLC; Software Development Life Cycle)
- 소프트웨어 개발 방법론의 바탕이 되는것
Secure SDLC 대표 방법론
- CLASP : Secure Software 사에서 개발, 초기단계에서 보안 강화하기 위해..,활동중심 역할 기반의 프로세스로 구성
- SDL : 마이크로소프트사에서 개발, 전통적인 나선형 모델 기반
- Seven Touchpoints : 설계 및 개발 과정의 모든 산출물에 대해 위험 분석 및 테스트 수행, 각단계에 관련된 7개의 보안 강화 활동 수행
보안요소
- 기밀성 : 인가된 사용자만 접근 가능
- 무결성 : 인가된 사용자만 수정 가능
- 가용성 : 인가된 사용자만 언제라도 사용 가능
- 인증 : 합법적 사용자인지 확인
- 부인 방지 : 사실을 부인할수 없도록 송수신 증거 제공
세션 통제
세션은 서버와 클라이언트의 연결을 의미, 세션통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것
요구사항 분석 및 설계 단계에서 진단해야하는 보안 점검 내용
세션 하이재킹(Session Hijacking)
- 서버에 접속한 클라이언트의 세션 정보를 가로채는 공격기법
- 정상적인 연결을 RST(reset) 패킷을 통해 종료시킨후 재연결시 연결 당사자가 아닌 공격자에게 연결됨
- 연결되어 인가되지 않은 시스템의 기능 이용 or 정보 접근
세션하이재킹 탐지방법
- 비동기화 상태 탐지
- ACK Storm 탐지 : 패킷량이 비정상적으로 늘어나는 현상을 탐지
- 패킷의 유실 탐지
- 예상치 못한 접속의 리셋 탐지
세션 설계시 고려사항
- 어느페이지든 로그아웃 가능하게 UI구성
- 로그아웃 시 세션 완전히 제거
- 세션 타임아웃 중요한것은 2~5분, 아니면 15~30분
- 세션 종료안되면 새세션 생성 못하게 설계
- 패스워드 변경시 활성화된 세션 삭제후 재할당
세션 ID의 관리 방법
- 안전한 서버에 최소 128비트 길이
- 난수 알고리즘 적용
- 로그인시 로그인 전 세션ID 삭제하고 재할당
- 장기간 접속한 세션ID는 주기적으로 재할당
- 노출되지 않도록 URL Rewrite기능을 사용하지 않는 방향으로 설계
입력 데이터 검증 및 표현
입력 데이터 검증 및 표현의 보안 약점
SQL 삽입(SQL Injection)
- 웹 응용프로그램에 SQL 삽입해 DB 서버 데이터 유출 및 변조
- 동적 쿼리에 사용되는 입력데이터에 예약어 및 특수문자 입력못하게 하면됨
경로 조작 및 자원삽입
- 데이터 입출력 경로 조작해 서버 자원을 수정 삭제할 수 있는 보안 약점
- 입력값을 식별자로 사용하는 경우 경로 순회 공격을 막는 필터를 사용해 막음(/,\,.. 등 사용못하게)
크로스사이트 스크립팅(XSS;Cross site Scripting)
- 웹페이지에 악의적인 스크립트를 삽입해 방문자 정보 탈취등 비정상적인 기능 수행하는 보안 약점
- HTML 태그 사용 제한(<,>,&등 문자를 다른 문자로 치환)
운영체제 명령어 삽입
- 외부입력값을 통해 시스템 명령어의 실행을 유도해 권한 탈취 및 장애 유발하는 보안약점
- 외부 입력값을 검증없이 내부 명령어로 사용 x로 방지
위험한 형식 파일 업로드
- 명령어가 포함된 스크립트 파일을 업로드해 시스템에 손상주는 보안약점
- 확장자 제한, 파일명의 암호화 등으로 방지
메모리 버퍼 오버플로
- 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위 넘어선 위치에서 자료 읽거나 쓸때 발생
- 적절한 버퍼 크기 설정, 설정된 범위에서만 읽고 쓰게 함으로 방지
코드 오류
스택가드
메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정값을 저장한 후
그 값이 변경되었을 경우 오버플로우 상태로 판단하여 프로그램 실행을 중단함으로써
잘못된 복귀 주소의 호출을 막는 기술
암호 알고리즘
암호 알고리즘은 Hash를 사용하는 단방향 암호화방식과, 대칭키 및 비대칭키로 분류되는 양방향 암호화 방식이 있음

대칭키 암호화 기법(양방향)
동일한 비밀키로 데이터를 암호화하고 복호화함
한번에 하나의 데이터 블록을 암호화하는 블록 암호화,
평문과 동일한 길이의 스트림을 생성해 비트 단위로 암호화하는 스트림 암호화 방식으로 나뉨
- 블록 암호화 방식
- DES : 1975년 미국 NBS에서 발표함, 블록크기는 64bit이며 키 길이는 56bit
- SEED : 1999년 한국인터넷진흥원에서 발표, 블록크기는 128bit이며 키 길이는 128, 256으로 분류됨
- AES : 2001년 미국 표준 기술연구소에서 발표, DES 한계를 느껴 발전해 나옴, 블록크기는 128bit이며 키 길이는 128 ,192, 256으로 분류
- ARIA : 2004년 국가정보원과 산학연협회가 개발, 블록크기는 128bit, 키 길이에 다라 128, 192, 256
- IDEA
- 스트림 암호화 방식
- LFSR : 시퀀스 생성 알고리즘, 선형 관계를 통해 비트 시퀀스 생성해
- RC4
비대칭키 암호화 기법(양방향)
암호화 할때는 공개키는 데이터베이스 사용자에게
복호화할 때 비밀키는 관리자가 비밀리에 관리
- 대표 암호화 방식
- RSA : 1978년 MIT 사람들에 의해 제안, 큰숫자를 소인수분해 하기 어렵다는것에 기반해 개발, 공개키와 비밀키를 사용
- ECC : 1985년 RSA 암호방식의 대안으로 제안, 이산대수 문제를 타원곡선으로 옮겨 기밀성, 효율성을 높임
- Rabin : 1979년에 미하엘 라빈이 제안, 소인수분해 어려움에 안전성의 근거를 둬 개발
해시(HASH, 단방향)
- 데이터나 메시지를 고정된 길이의 값이나 키로 변환
-
복호화가 거의 불가능한 단방향 함수에 해당
- 대표 해시 함수 종류
- SHA 시리즈 : 1993년 NSA이 처음 계발
- MD5 : 1991년 MD4를 대체하기 위해 고안, 블록크기는 512bit, 키길이는 128bit
- N-NASH : 1989년 일본의 NTT에서 발표, 블록크기 128bit, 키길이 128bit
- SNEFRU : 1990년 발표됨, 32비트 프로세서에 용이, 블록크기 512bit, 키길이 128, 256로 분류
솔트
암호화하는데 같은 알고리즘 적용시 결과가 동일해지니
앞에 무작위 값을 덧붙이는 과정을 수행하는데
무작위 값을 솔트라 함
시스템 보안 구축
서비스 공격 유형
서비스 거부(DoS; Denial of Service) 공격의 개념
서비스 거부 공격을 통틀어서 DoS라 부름
Ping of Death(죽음의 핑)
- 패킷의 크기를 허용 범위 이상으로 전송해 네트워크 마비
- 큰 패킷 -> 수백개로 분할돼 전송 -> 재조립 부담 + ICMP Ping 메시지에 응답처리하다 다운됨
ICMP Ping 메시지
특정 IP로 패킷이 전송될때 해당 IP의 노드가 운영중인지 확인을 요청하는 메시지
ICMP : 인터넷 제어 메시지 프로토콜
SMURFING(스머핑)
- IP나 ICMP의 특성을 악용해 엄청난 양의 데이터를 한곳에 집중적으로 보내 마비
- 각 네트워크 라우터에서 브로드캐스트 주소를 사용할 수 없게 미리 설정해 방지
SYN Flooding
- TCP는 신뢰있는 전송을 위해 3-way-handshake 거친후 데이터 전송함
- 이를 이용해 공격자가 가상 클라이언트로 위장해 3-way-handshake 과정을 의도적으로 중단
- SYN 수신 대기 시간을 줄이거나 침입차단 시스템 활용으로 방지
TearDrop
- 데이터 송수신에서 패킷의 크기가 여러개로 분할 전송되는데 이때 Fragment Offset도 같이 보냄
- 이를 악용해 Offset값을 변경해 재조립때 오류 발생으로 과부화
- Offset이 잘못된 경우 해당 패킷을 폐기함으로 방지
Land
- 송신 IP주소와 수신 IP주소를 모두 공격 대상의 IP주소로 바꾸어 무한 응답
- 송신IP와 수신 IP 주소의 적절성을 검사해 대비
DDoS(Distributed Denial of Service, 분산 서비스 거부)공격
- 여러 곳에 분산된 공격 지점에서 한 곳의 서버에 대해 분산 서비스 공격을 수행
- 네트워크 취약점 있는 호스트 탐색해 호스트들에 분산 서비스 공격용 툴 설치해 DDos공격에 이용
네트워크 침해 공격 관련 용어
스미싱(Smishing)
- SMS + Fishing
- SMS를 이용해 신용 정보 빼내는 수법
스피어 피싱(Spear Phishing)
- 사회공학의 한 기법
- 일반적인 이메일을 위장해 첨부파일이나 링크 클릭 유도해 개인 정보 탈취
APT(Advanced Persistent Threats, 지능형 지속 위협)
- 다양한 IT 기술로 조직적으로 특정 기업이나 조직 네트워크에 침투해 거점 마련
- 이후 보안을 무력화시키고 정보를 수집한 후 외부로 빼돌림
큐싱(Qshing)
- QR + Fishing
- QR코드를 통해 악성앱 다운 유도해 악성프로그램 설치해 정보 탈취
Phishing
- Private Data + Fishing
- 이메일 or 메신저로 공기관이나 금융을 사칭해 개인정보 탈취
Ping Flood
- 특정 사이트에 매우 많은 ICMP 메시지 보내어 정상적 동작 못하게 막는 방법
스위치 재밍(Switch Jamming)
- 위조된 MAC 주소를 지속적으로 네트워크로 흘려보냄
- 스위치 MAC 주소 테이블의 저장 기능을 혼란 시켜 더미 허브처럼 작동하게함
정보 보안 침해 공격 관련 용어
좀비 PC
- 악성코드 감염되 조종이 되는 컴퓨터
- C&C 서버의 제어를 받아 주로 DDos 공격등에 이용
C&C 서버
- 좀비 PC에 명령을 내리고 악성코드를 제어하기 위한 용도로 사용하는 서버
봇넷(Botnet)
- 다수의 좀비 PC들이 네트워크로 연결된 형태
웜(Worm)
- 네트워크를 통해 자신을 복제해 시스템의 부하 높여 시스템 다운시키는 바이러스
- 분산 서비스 거부 공격(DDoS), 버퍼 오버플로 공격, 슬래머등이 웜 공격의 한 형태
제로 데이 공격(Zero Day Attack)
- 보안 취약점의 존재가 널리 공표되기전 취약점을 통해 이뤄지는 공격
키로거 공격(Key Logger Attack)
- 키보드 움직임을 탐지해 개인 정보 탈취
랜섬웨어(Ransomware)
- 문서나 파일을 암호화해 사용자가 이용못하게 함
백도어(Back Door)
- 액서스 편의를 위해 시스템 보안을 제거해 만들어놓은 비밀 통로
- 이를 악용해 침입
트로이 목마(Trojan Horse)
- 정상적인 척하다 프로그램 작동할때 활성화되어 부작용 일으킴
파밍(Pharming)
- 좀비 PC를 조작해 중간에 가짜 사이트로 접속하게 해 개인 정보 탈취
서버 인증
- 인가 : 인증된 사용자의 요청에 대한 권한 여부 확인 후 이를 부여하는 것
- 인증 : 신원을 증명하는 것
인증의 주요 유형
지식 기반 인증
- 사용자의 기억을 기반으로
- 고정된 패스워드
- 패스 프레이즈
- 아이핀
소유 기반 인증
- 사용자가 소유하고 있는 것을 기반으로
- 신분증
- 메모리 카드(토큰)
- 스마트 카드
- OTP
생체 기반 인증
- 사용자 고유한 생체 정보 기반
- 지문
- 홍채/망막
- 얼굴
- 정맥
기타 인증 기법
- 행위 기반 인증 : 서명, 동작, 음성
- 위치 기반 인증 : 콜밸, GPS
보안 솔루션
접근 통제, 침입 차단 및 탐지등을 수행해 외부로부터 침입을 막는 기술 및 시스템
방화벽
- 외부에서 내부로 들어오는 패킷을 엄밀히 체크
침입 탐지 시스템(IDS; Intrusion Detection System)
- 컴퓨터 시스템의 비정상적인 사용, 오용, 남용 등을 실시간으로 탐지
- 오용 탐지 : 미리 입력해둔 공격패턴이 감지되면 알려줌
- 이상 탐지 : 평균 시스템 상태를 기준으로 비정상적인 자원 사용이 감지되면 알려줌
침입 방지 시스템(IPS; Intrusion Prevention System)
- 방화벽 + 침입 탐지 시스템
VPN(Virtual Private Network, 가상 사설 통신망)
- 사용자가 마치 자신의 전용 회선을 사용하는 것처럼 해줌
SSH(Secure SHell, 시큐어 셸)
- 다른 컴퓨터에 로그인, 원격 명령, 파일 복사 등을 수행할 수 있도록 다양한 기능을 지원하는 프로토콜 또는 프로그램
- 기본적으로 22번 포트를 사용