Cohe
9-1 소프트웨어 개발 보안 설계 본문
소프트웨어 개발 보안 설계: 완벽 가이드
1. 소프트웨어 개발 보안의 개념
소프트웨어 개발 보안은 개발 과정에서 보안을 고려하여 안전한 소프트웨어를 만드는 것을 목표로 합니다. 이는 다음과 같은 활동을 포함합니다:
- 소스 코드의 보안 취약점 제거
- 보안을 고려한 기능 설계 및 구현
- 개발 전 과정에서의 보안 활동 수행
1.1 개발 단계별 보안 활동
단계 | 활동 |
---|---|
요구사항 명세 | - 보안 항목 식별 - 보안 요구사항 명세서 작성 |
설계 | - 위협 모델링 - 보안 설계 검토 - 보안 통제 수립 |
구현 | - 표준 코딩 정의서 준수 - 소스 코드 보안 약점 진단 |
테스트 | - 모의침투 테스트 - 동적 분석 |
유지보수 | - 지속적인 개선 - 보안 패치 관리 |
2. 소프트웨어 개발 보안의 구성요소
소프트웨어 개발 보안은 다음 세 가지 주요 요소로 구성됩니다:
기밀성 (Confidentiality)
- 정의: 인가되지 않은 개인 혹은 시스템의 접근과 정보 노출 차단
- 구현 방법: 암호화, 접근 제어
무결성 (Integrity)
- 정의: 데이터의 정확성 및 완전성 보장, 비인가된 변경 방지
- 구현 방법: 해시 함수, 전자서명
가용성 (Availability)
- 정의: 인가된 사용자의 지속적인 시스템 및 데이터 접근 보장
- 구현 방법: 백업, 장애 복구 시스템
2.1 주요 용어
용어 | 설명 |
---|---|
자산 (Asset) | 조직이 가치를 부여한 대상 (예: 서버, 중요 데이터) |
위협 (Threat) | 자산에 악영향을 끼칠 수 있는 사건이나 행위 |
취약점 (Vulnerability) | 위협이 발생할 수 있는 시스템의 약점 |
위험 (Risk) | 위협이 취약점을 이용해 자산에 손실을 가져올 가능성 |
3. 주요 공격 기법과 대응 방안
소프트웨어 개발 과정에서 고려해야 할 주요 공격 기법들과 그에 대한 대응 방안을 자세히 살펴보겠습니다.
3.1 DoS/DDoS 공격
정의
- DoS(Denial of Service): 시스템의 자원을 고갈시켜 서비스를 마비시키는 공격
- DDoS(Distributed DoS): 여러 대의 공격 지점에서 동시에 DoS 공격을 수행
주요 유형
SYN 플러딩
- 공격 방식: TCP 연결 과정의 3-way handshake를 악용. SYN 패킷만 대량으로 보내고 ACK를 보내지 않아 서버의 연결 대기 큐를 소진
- 영향: 정상적인 연결 요청을 처리할 수 없게 됨
UDP 플러딩
- 공격 방식: 대량의 UDP 패킷을 임의의 포트로 전송
- 영향: 서버가 "포트 도달 불가" ICMP 응답을 생성하느라 자원을 소모
HTTP GET 플러딩
- 공격 방식: 웹 서버에 대량의 HTTP GET 요청을 전송
- 영향: 웹 서버의 처리 능력 저하 및 대역폭 소진
Slowloris 공격
- 공격 방식: HTTP 요청을 매우 천천히 부분적으로 보내 연결을 오래 유지
- 영향: 웹 서버의 연결 풀을 고갈시킴
대응 방안
트래픽 모니터링 및 필터링
- 비정상적인 트래픽 패턴 탐지 및 차단
- 임계치 기반의 필터링 규칙 설정
방화벽 및 IPS 구축
- 네트워크 단에서 공격 트래픽 차단
- 시그니처 기반 및 행위 기반 탐지 활용
CDN(Content Delivery Network) 활용
- 트래픽 분산 및 대용량 공격 흡수
자원 확장 및 로드 밸런싱
- 서버 자원의 동적 확장(Auto Scaling)
- 트래픽 부하 분산
연결 타임아웃 설정
- 연결 대기 시간 제한으로 자원 고갈 방지
캡챠(CAPTCHA) 활용
- 자동화된 공격 요청 차단
3.2 SQL 인젝션
정의
- 악의적인 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 공격
공격 유형
오류 기반 SQL 인젝션
- 데이터베이스 오류 메시지를 이용해 정보를 추출
UNION 기반 SQL 인젝션
- UNION 구문을 이용해 추가 쿼리 결과를 반환받음
Blind SQL 인젝션
- 참/거짓 질의를 통해 정보를 유추
시간 기반 SQL 인젝션
- 쿼리 실행 시간 차이를 이용해 정보를 추출
대응 방안
입력값 검증 및 필터링
- 특수문자 및 SQL 키워드 필터링
- 화이트리스트 방식의 입력 검증
준비된 구문(Prepared Statement) 사용
- SQL 쿼리와 데이터를 분리하여 처리
- 매개변수화된 쿼리 사용
저장 프로시저 활용
- 미리 정의된 프로시저를 통해 쿼리 실행
최소 권한 원칙 적용
- 데이터베이스 사용자 계정의 권한 최소화
에러 메시지 최소화
- 상세한 에러 정보 노출 방지
웹 방화벽(WAF) 사용
- SQL 인젝션 공격 패턴 탐지 및 차단
3.3 크로스 사이트 스크립팅 (XSS)
정의
- 웹 페이지에 악성 스크립트를 삽입하여 사용자 측에서 실행되게 하는 공격
공격 유형
저장형 XSS
- 악성 스크립트가 서버에 저장되어 다른 사용자에게 전달됨
- 예: 게시판 글, 댓글 등
반사형 XSS
- 악성 스크립트가 URL 파라미터 등을 통해 즉시 반사되어 실행됨
- 예: 검색 결과, 에러 메시지 등
DOM 기반 XSS
- 클라이언트 측 스크립트가 DOM을 조작하여 발생
- 서버를 거치지 않고 브라우저에서 직접 실행됨
대응 방안
입력값 검증 및 인코딩
- 특수문자 및 스크립트 태그 필터링
- HTML 엔티티 인코딩 적용
콘텐츠 보안 정책(CSP) 적용
- 허용된 스크립트 소스만 실행되도록 제한
HttpOnly 플래그 사용
- 쿠키에 대한 스크립트 접근 방지
출력값 이스케이핑
- 동적으로 생성되는 HTML, JavaScript, CSS 등에서 특수문자 이스케이핑
라이브러리 및 프레임워크 활용
- XSS 방어 기능이 내장된 검증된 라이브러리 사용
브라우저 XSS 필터 활용
- X-XSS-Protection 헤더 사용
3.4 CSRF (Cross-Site Request Forgery)
정의
- 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격
공격 과정
- 사용자가 취약한 사이트에 로그인하여 세션을 유지
- 공격자가 준비한 악성 사이트에 접속
- 악성 사이트에서 자동으로 취약한 사이트로 요청을 전송
- 브라우저가 자동으로 쿠키를 포함하여 요청을 전송
- 취약한 사이트는 정상적인 요청으로 인식하고 처리
대응 방안
CSRF 토큰 사용
- 각 요청마다 unique한 토큰을 생성하여 검증
Referer 검증
- 요청의 출처를 확인하여 허용된 도메인인지 검증
SameSite 쿠키 속성 사용
- 크로스 사이트 요청 시 쿠키 전송 제한
Double Submit Cookie 패턴
- 쿠키와 요청 파라미터에 동일한 랜덤 값을 포함시켜 검증
사용자 인증 강화
- 중요 기능에 대해 재인증 요구
캡챠(CAPTCHA) 활용
- 자동화된 요청 방지
3.5 버퍼 오버플로우
정의
- 프로그램이 할당된 메모리 버퍼의 경계를 넘어 데이터를 쓰거나 읽을 때 발생하는 취약점
공격 유형
스택 기반 버퍼 오버플로우
- 로컬 변수나 함수의 리턴 주소가 저장된 스택 영역 공격
힙 기반 버퍼 오버플로우
- 동적으로 할당된 메모리 영역 공격
대응 방안
안전한 함수 사용
- strcpy() 대신 strncpy(), gets() 대신 fgets() 등 사용
경계 검사
- 입력 데이터의 길이를 항상 검증
ASLR (Address Space Layout Randomization)
- 프로세스의 메모리 배치를 무작위화하여 공격 어렵게 함
DEP (Data Execution Prevention)
- 데이터 영역에서 코드 실행을 방지
스택 가드(Stack Guard)
- 스택에 카나리(Canary) 값을 삽입하여 변조 탐지
컴파일러 보안 옵션 활성화
- 스택 보호, 버퍼 오버플로우 감지 옵션 등 사용
4. 암호화 알고리즘
4.1 대칭키 암호화
- 정의: 동일한 키로 암호화와 복호화를 수행
- 알고리즘 예: AES, DES, ARIA
- 장점: 속도가 빠름
- 단점: 키 관리의 어려움
4.2 비대칭키 암호화
- 정의: 공개키와 개인키 쌍을 사용
- 알고리즘 예: RSA, ECC
- 장점: 키 교환의 안전성
- 단점: 대칭키에 비해 느림
4.3 해시 함수
- 정의: 임의의 길이의 입력을 고정 길이의 출력으로 변환
- 알고리즘 예: SHA-256, MD5 (보안상 취약하여 사용 비권장)
- 용도: 무결성 검증, 패스워드 저장
5. 보안 프로토콜
5.1 SSL/TLS
- 정의: 웹 통신의 암호화 및 인증을 위한 프로토콜
- 특징:
- 전송 계층에서 동작
- 인증서를 통한 신원 확인
- 사용 예: HTTPS
5.2 IPSec
- 정의: IP 계층에서의 보안 프로토콜
- 모드:
- 전송 모드: 페이로드만 보호
- 터널 모드: IP 패킷 전체 보호
- 사용 예: VPN
6. 개발 보안 방법론
- 민감한 정보를 통신 채널을 통하여 전송 시에는 반드시 암 • 복호화 과정을 거쳐야 하고, IPSec, SSL/TLS, S-HTTP 등 보안 채널을 활용하여 전송한다.
6.1 MS-SDL (Microsoft Security Development Lifecycle)
- 마이크로소프트에서 개발한 보안 개발 생명주기
- 단계: 교육 → 요구사항 → 설계 → 구현 → 검증 → 릴리스 → 대응
6.2 OWASP CLASP (Comprehensive, Lightweight Application Security Process)
- OWASP에서 제공하는 경량 보안 프로세스
- 주요 활동: 보안 요구사항 수집 → 아키텍처 및 설계 검토 → 코드 검토 → 보안 테스트
7. 정보 자산 관리
7.1 자산 분류
구분 | 예시 |
---|---|
소프트웨어 | 응용 프로그램, 운영체제 |
하드웨어 | 서버, 네트워크 장비 |
데이터 | 데이터베이스, 파일 |
인적 자원 | 개발자, 관리자 |
7.2 위험 평가 및 대응
- 자산 식별
- 위협 분석
- 취약점 평가
- 위험도 산정
- 대응 방안 수립
구분 | 설명 | 사용 예시 |
---|---|---|
소프트웨어 | - 상용 또는 자체 개발된 소프트웨어 자산 | - 애플리케이션, 개발도구, 유틸리티 |
하드웨어 | - 대외 서비스 또는 개인 사용을 위해 사용됨 | 서버, PC, 노트북, 라우터, 스위치 |
데이터 | - 전자적 형태로 저장되는 데이터 | 데이터베이스, 데이터파일 |
문서 | - 종이 매체로 된 정보자산 | |
- 업무 목적 문서, 기록물 | 결재문서, 계약서, 합의서 | |
시설 | - 시스템 설치, 운영 장소 등 물리적 공간 및 시설 | 사무실, 전산실, 통신실 |
지원설비 | - 정보시스템 운영을 지원하기 위한 설비 | UPS, 항온항습기, 발전기 |
인력 | • 시스템 운영 업무 수행 중인 인력 | 내부직원, 협력업체 |
8 SW 개발 보안 적용 사례
- SW 개발 보안의 대표적인 사례로는 BSIMM, Open SAMM, Seven Touchpoints, MS-SDL, OWASP CLASP 등의 방법론이 있다.
구분 | 설명 |
---|---|
BSIMM | - 미국 국토안보국의 지원을 받아 수행된 소프트웨어 보증 프로그램 |
- 보안 활동의 성숙도 수준을 영역별로 측정함으로써 소프트웨어 개발에 필요한 보안 능력 향상을 목표로 하는 개발 프레임워크 | |
Open SAMM | • OWASP에서 개발한 개방형 보완 프레임워크 |
• 개방을 원칙으로 소규모, 중규모, 대규모로 점진적인 확대가 가능한 융통성 있는 프레임워크 | |
• BSIMM과는 달리 설계 리뷰와 코드 리뷰, 그리고 보안 테스팅을 3개의 중요한 검증 활동으로 정의함으로써 이들 활동 간의 연계성 강조 | |
Seven TouchPoints | • 실무적으로 검증된 개발 보안 방법론 중 하나로써 SW 보안의 모범 사례를 SDLC(Software Development Ufe Cycle)에 통합한 소프트웨어 개발 보안 생명주기 방법론 |
MS SDL | • 마이크로소프트사가 2004년 이후 자사의 소프트웨어 개발에 의무적으로 적용하도록 고안한 보안강화 프레임워크 |
• SDL은 개발 중인 제품이 보안 위협에 대해 얼마나 강인한가를 측정하기 위해 동일한 제품에 대해 ‘pre-SDL’과 ‘post-SDL’의 두 개의 버전으로 테스트 | |
OWASP CLASP | • 개념 관점, 역할 기반 관점, 활동평가 관점, 활동구현 관점, 취약성 관점 등의 활동중심, 역할 기반의 프로세스로 구성된 보안 프레임워크로 이미 운영 중인 시스템에 적용하기 쉬운 보안 개발 방법론 |
• 프로그램 설계나 코딩 오류를 찾아내어 개선하기 위해 개발팀에 취약점 목록을 제공 |
'자격증 공부 > 정보처리기사 실기' 카테고리의 다른 글
10. 애플리케이션 테스트 관리 (3) | 2024.10.10 |
---|---|
9-2 소프트웨어 개발 보안 구현 (1) | 2024.10.09 |
8. 서버 프로그램 구현 (1) | 2024.10.07 |
5. 인터페이스 구현 (3) | 2024.10.05 |
4. 통합 구현 (0) | 2024.10.05 |