Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 클라우드
- 드림핵
- DreamHack
- it자격증
- Shell
- reivew
- 기록
- IT
- Security
- 웹해킹
- study
- 리눅스
- 자격증공부
- 위험관리
- Review
- webhacking
- 보안
- 정리
- wargame
- 정보처리기사
- 자격증
- 리눅스마스터2급
- 복습
- keyword
- 워게임
- 케이쉴드주니어
- 공부
- 보안용어
- 취약점진단
- Linux
Archives
- Today
- Total
IT Memory Note
[정보처리기사] 소프트웨어 개발 보안 구축 : 소프트웨어 개발 보안 구현(1) 본문
1️⃣ SW 개발 보안 구현
☆☆☆
(1) 시큐어 코딩 가이드
- 설계 및 구현 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법
- 소프트웨어 보안 약점을 방지하기 위한 시큐어 코딩 가이드에 따른 개발 수행이 필요함
< 시큐어 코딩 가이드 적용 대상 >
보안 약점 | 내용 | 대응방안 |
입력 데이터 검증 및 표현 | 프로그램 입력값에 대한 검증 누락•부적절한 검증, 잘못된 형식 지정 | 사용자•프로그램 입력 데이터에 대한 유효성 검증 체계를 수립하고 실패 시 처리 설계 및 구현 |
보안 기능 | 보안 기능(인증, 접근 제어, 기밀성, 암호화, 권한 관리 등)의 부적절한 구현 | 인증•접근 통제, 권한 관리, 비밀번호 등의 정책이 절절하게 반영되도록 설계 및 구현 |
시간 및 상태 | 거의 동시에 수행 지원하는 병렬 시스템 또는 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절한 관리 | 공유 자원의 접근 직렬화, 병렬 실행 가능 프레임워크 사용, 블록문 내에서만 재귀함수 호출 |
에러 처리 | 에러 미처리, 불충분한 처리 등으로 에러 메시지에 중요 정보가 포함 | 에러 또는 오류 상황을 처리하지 않거나, 불충분하게 처리되어 중요 정보 유출 등 보안 약점이 발생하지 않도록 시스템 설계 및 구현 |
코드 오류 | 개발자가 범할 수 있는 코딩 오류로 인해 유발 | 코딩 규칙 도출 후 검증 가능한 스크립트 구성과 경고 순위의 최상향 조정 후 경고 메시지 코드 제거 |
캡슐화 | 기능성이 불충분한 캡슐화로 인해 인가되지 않은 사용자에게 데이터 누출 | 디버그 코드 제거와 필수 정보 외의 클래스 내 Private 접근자 지정 |
API 오용 | 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API의 사용 | 개발 언어별 취약 API 확보 및 취약 API 검출 프로그램 사용 |
※ 보안 취약점(Vulnerability) : 해킹 등 외부 공격으로 시스템의 보안 정책을 침해하는 보안사고의 실제 원인이 되는 시스템 상의 보안 허점이며, 운영단계의 보안 리스크임
※ 보안 약점(Weakness) : 보안 취약점의 근본적인 원인이 되는 SW의 결함, 실수, 버그 등의 오류로, 개발 단계의 보안 리스크임
※ 직렬화(Serialization) : 데이터 구조나 오브젝트 상태를 다른 컴퓨터 환경으로 저장하고 재구성할 수 있는 포맷으로 변환하는 과정
(2) 입력 데이터 검증 및 표현
1. 입력 데이터 검증 및 표현의 개념
- 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들
- 입력 데이터로 인해 발생하는 문제를 예방하기 위해서는 SW 개발의 구현 단계에서 유효성 검증 체계를 갖추고, 검증되지 않은 데이터의 입력을 처리할 수 있도록 구현해야 함
2. 입력 데이터 검증 및 표현 취약점
⓵ 입력 데이터 검증 및 표현 취약점
취약점 | 설명 | 대책 |
XSS (Cross Site Scripting) |
검증되지 않은 외부 입력 데이터가 포함된 웹 페이지가 전송되는 경우, 사용자가 해당 웹 페이지를 열람함으로써 웹 페이지에 포함된 부적절한 스크립트가 실행되는 공격 | • 특수문자 등록을 방지하기 위해 특수문자 필터링 • HTML 태그 사용 금지 • 자바스크립트로 시작하는 문자열은 모두 문자열 변환 처리 |
사이트 간 요청 위조 (CSRF, Cross Site Request Forgery) |
사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격 | • 입력화면 폼을 작성 시 GET 방식보다 POST 방식 사용 • 입력 폼과 입력 처리 프로그램에서 세션별 CSRF 토큰을 사용하여 점검 • 중요 기능의 경우 재인증을 통해 안전하게 실제 요청 여부를 확인하도록 구현 |
SQL 삽입 (Injection) |
응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 DB 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격 기법 | • 바인딩 매개변수 방식 적용하여 사전에 변수 타입을 명시적으로 지정 • 사용자로부터 입력될 수 있는 모든 값을 체크하여 필터링 • Servlet Filter 기능 적용(Java에서만 적용) |
⓶ XSS(Cross Site Scripting)
㉮ XSS 공격 유형
공격 유형 | 설명 |
Stored XSS | 방문자들이 악성 스크립트가 포함된 페이지를 읽어봄과 동시에 악성 스크립트가 브라우저에서 실행되면서 감염되는 기법 |
Reflected XSS | 공격용 악성 URL을 생성한 후 이메일로 사용자에게 전송하면 사용자가 URL 클릭 시 즉시 공격 스크립트가 피해자로 반사되어 접속 사이트에 민감 정보를 공격자에게 전송하는 기법 |
DOM(Document Object Model) XSS |
공격자는 DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 조작된 URL을 이메일을 통해 발송하고 피해자가 URL 클릭 시 공격 피해를 당하는 기법 |
㉯ XSS 공격 방식
번호 | 공격 절차 |
1 | 임의의 XSS 취약점이 존재하는 서버에 XSS 코드를 작성하여 삽입 저장 |
2 | 해당 웹 서비스 사용자가 공격자가 작성해 놓은 XSS 코드에 접근 |
3 | 사용자가 XSS 코드가 저장된 페이지에 정보를 요청 |
4 | 사용자의 시스템에서 XSS 코드 실행 |
5 | XSS 코드가 실행된 결과가 공격자에게 전달되고 공격자는 결과를 가지고 웹 서버에서 2차 해킹 시도 |
⓷ CSRF(Cross Site Request Forgery)
< CSPF 공격 방식 >
공격 절차 | |
1 | 공격자는 CSPF 스크립트가 포함된 게시물을 등록 |
2 | 사용자는 CSPF 스크립트가 포함된 페이지의 게시물 열람 요청 |
3 | 게시물을 읽은 사용자의 권한으로 공격자가 원하는 요청 발생 |
4 | 공격자가 원하는 CSPF 스크립트 결과가 발생 |
※ XSS는 악성코드가 클라이언트 PC에서 실행돼서 클라이언트 PC의 정보(쿠키 정보 등)가 공격자에게 탈취되는 공격 방식이고, CSPF는 공격자의 악의적인 요청이 클라이언트로 하여금 희생자 서버에서 실행되게 되는 공격임
※ CSPF 공격을 받는 피해자는 희생자 은행 사이트에 접속해서 피해자의 계좌에서 공격자의 계좌로 돈을 이체시키는 행위를 나도 모르게 하게 됨
※ XSS와 CSPF의 차이점 : XSS는 사용자만 피해를 입고, CSRF는 웹 서버, 사용자 모두 피해를 입는다는 점
⓸ SQL 삽입(Injection)
< SQL 삽입 공격 절차 >
순서 | 공격 절차 |
1 | 응용 프로그램의 취약점 탐지 |
2 | 악의적인 SQL 구문 삽입하여 인증 우회 |
3 | 권한이 상승되어 DB의 정보 탈취 및 조작 실행 |
(3) 보안 기능
1. 보안 기능의 개념
- SW 개발 단계에서 인증, 접근제어, 기밀성, 암호화, 권한 관리 등을 적절하게 구현하기 위한 보안 점검 항목들
- 각 보안 기능들은 서비스 환경이나 취급 데이터에 맞게 처리될 수 있도록 구현해야 함
2. 보안 기능 취약점
- 보안 기능에 대한 점검을 수행하여 적절한 인증 없이 중요 기능 허용, 부적절한 인가, 취약한 암호화 알고리즘 사용, 중요 정보의 평문 저장 및 전송, 하드 코드된 비밀번호 등의 보안 취약점을 방지해야 함
취약점 | 설명 | 대책 |
적절한 인증 없이 중요 기능 허용 | 보안 검사를 위회하여 인증 과정 없이 중요 정보 또는 기능에 접근 및 변경이 가능 | 중요 정보나 기능을 수행하는 페이지에서는 재인증 기능을 통해 방지 |
부적절한 인가 | 접근제어 기능이 없는 실행 경로를 통해 정보 또는 권한 탈취 | 모든 실행 경로에 대해 접근제어 검사를 수행하고, 사용자에게는 반드시 필요한 접근권만 부여하여 방지 |
취약한 암호화 알고리즘 사용 |
암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요 정보 탈취 | 안전한 암호화 알고리즘, 안정성이 인증된 암호 모듈을 이용하여 방지 |
중요정보 평문 저장 및 전송 |
암호화되지 않은 평문 데이터를 탈취하여 중요 정보 획득 가능 | 중요 정보 저장 밒 전송 시 반드시 암호화 과정을 거치도록 하고, HTTPS, SSL/TLS 등의 보안 채널을 이용하여 방지 |
하드 코드된 비밀번호 |
프로그램 코드 내부에 패스워드 포함 시 관리자 정보가 노출될 수 있는 보안 취약점 | • 패스워드는 암호화하여 별도 파일에 저장 • 소프트웨어 설치 시 직접 패스워드나 키를 입력하도록 설계하여 방지 |
취약한 패스워드 요구 조건 |
취약한 사용자 패스워드 조합 규칙에 따른 사용자 계정 보안 취약점 | 패스워드 생성 시 강한 조건 검증 필요 |
(4) 에러 처리
1. 에러 처리의 개념
- 프로그램 실행 시 발생하는 에러를 예외 처리하지 못하거나, 에러 정보에 중요한 정보(프로그램 정보, 상세한 에러 내역 등)가 포함될 때 발생할 수 있는 취약점을 예방하기 위한 보안 점검 항목들
- 각 프로그래밍 언어의 예외 처리 구문을 통해 오류에 대한 사항을 정의하지 않으면 중요 정보를 노출시키거나, 소프트웨어의 실행이 중단되는 등 예기치 못한 문제를 발생시킴
2. 에러 처리 취약점
취약점 | 설명 | 대책 |
오류 메시지 통한 정보 노출 |
프로그램이 실행 환경, 사용자, 관련 데이터에 대한 민감 정보를 포함하는 오류 메시지를 생성하여 공격자의 악성 행위를 도와주는 보안 취약점 | • 에러 메시지는 정해진 사용자에게 유용한 최소한의 정보만 표현 • 예외 사항을 내부적으로 처리하고 사용자에게 민감 정보를 포함하는 오류 출력 금지 |
오류 상황 대응 부재 |
오류가 발생할 수 있는 부분을 확인하였으나, 이러한 오류에 대하여 예외 처리를 하지 않았거나 미비로 인해 발생하는 보안 약점 | 오류가 발생할 수 있는 부분에 예외 처리 구문을 작성하고, 제어문을 활용하여 오류를 악용하지 않도록 코딩 |
적절하지 않은 예외 처리 |
프로그램 수행 중에 함수의 결과값에 대한 적절한 처리 또는 예외 상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 일으킬 수 있는 보안 약점 | 값을 반환하는 모든 함수의 결과값을 검사하여, 그 값이 기대한 값인지 검사하고, 예외 처리를 사용하는 경우에는 광범위한 예외 처리 대신 구체적인 예외 처리를 통해 방지 |
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 소프트웨어 개발 보안 구축 : 소프트웨어 개발 보안 구현(3) (2) | 2024.08.29 |
---|---|
[정보처리기사] 소프트웨어 개발 보안 구축 : 소프트웨어 개발 보안 구현(2) (0) | 2024.08.29 |
[정보처리기사] 소프트웨어 개발 보안 구축 : 소프트웨어 개발 보안 설계(3) (0) | 2024.08.27 |
[정보처리기사] 소프트웨어 개발 보안 구축 : 소프트웨어 개발 보안 설계(2) (0) | 2024.08.27 |
[정보처리기사] 소프트웨어 개발 보안 구축 : 소프트웨어 개발 보안 설계(1) (1) | 2024.08.27 |