소프트웨어 개발 보안 구축
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번 포트를 사용