목표
소프트웨어 개발 보안은 데이터의 기밀성, 무결성, 가용성을 유지하는 것을 목표로 한다.
- 기밀성 : 인가된 사용자만 접근할 수 있다.
- 무결성 : 인가된 사용자만 수정할 수 있다.
- 가용성 : 인가된 사용자는 언제 어디서든 사용할 수 있다.
관련 기관
- 행정안전부 : 총괄 / 법규, 지침, 제도 정비
- 한국인터넷진흥원 : 정책 및 가이드 개발
관련 법령
- 개인정보 보호법
- 정보통신망 이용촉진 및 정보보호 등에 관한 법률
- 신용정보의 이용 및 보호에 관한 법률
- 위치 정보의 보호 및 이용 등에 관한 법률
- 개인정보의 안전성 확보 조치 기준
- 개인정보 영향평가에 관한 고시
- RFID 프라이버시 보호 가이드라인
- 위치정보의 관리적 기술적 보호 조치 권고 해설서
- 바이오정보 보호 가이드라인
- 뉴미디어 서비스 개인정보 보호 가이드라인
Secure SDLC
software development life cycle 전 단계에 보안 강화 프로세스를 포함한 것
- 대표적인 방법론 : MS-SDL , CLASP
- 요구사항 분석 단계
- 조직의 정보보호 관련 보안 정책을 참고하여 소프트웨어 개발에 적용할 수 있는 정책 항목의 출처, 요구 수준, 세부 내용 등을 문서화한다.
- 보안항목에 해당하는 요구사항 식별
- 설계 단계
- 네트워크 : 외부 네트워크와 분리하거나 방화벽을 설치한다.
- 물리적 보안 : 실제 물리적으로 감시 설비 등을 통해 접근 통제
- 개발 프로그램 : 허가되지 않은 프로그램은 통제하고 지속적인 데이터 무결성 검사를 실시한다.
- 서버 : 보안이 뛰어난 운영체제를 사용하고 보안 업데이트, 외부 접근 통제 등을 실시한다.
- 식별된 보안 요구사항을 설계서에 반영하고 보안 설계서를 작성한다.
- 구현 단계
- 개발 중 지속적인 단위 테스트를 통해 보안 요소를 점검하고, 코드를 지속적으로 점검하여 코드의 안정성을 확보해야 한다.
- ** 시큐어 코딩 : 보안 요소를 고려하며 코딩하는 것
- 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하여 보안 설계서에 따라 구현한다.
- 테스트 단계
- 모든 결과는 문서화하고 개발자에게 피드백해야 한다.
- 보안 설계서를 바탕으로 보안 사항이 잘 반영되고 동작하는지 점검한다.
- 유지보수 단계
- 이후에도 발생할 수 있는 보안 사고들을 식별하고 발생시 이를 해결하고 보안 패치를 적용한다.
세션통제
- 세션 : 서버와 클라이언트의 연결
- 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용
세션 통제의 보안 약점
- 불충분한 세션 관리
- ** 세션 하이재킹 : 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채가는 공격
- 일정한 규칙이 있어 보안에 취약한 ID를 발급하거나 타임아웃이 너무 길게 설정되어 있는 경우
- 잘못된 세션에의한 정보 노출
- 멤버 변수 사용 → 경쟁 상태에서 동기화 오류가 발생하거나 멤버 변수의 정보가 노출될 수 있다.
- 다중 스레드 환경에서 멤버 변수에 정보를 저장할 경우 발생할 수 있다 그러므로 지역 변수를 활용하여 변수의 범위를 제한해야 한다.
세션 설계시 고려사항
- 모든 페이지에서 로그아웃할 수 있도록 한다.
- 로그아웃하면 할당된 세션이 모두 제거되도록 한다.
- 세션 타임아웃을 적절하게 설정한다.
- 이전 세션이 종료되지 않으면 새로운 세션을 생성할 수 없도록하여 세션 종료를 반드시 보장한다.
- 패스워드 변경시 활성화된 세션을 삭제하고 할당한다.
입력 데이터 검증 및 표현
- 구현 단계에서 검증해야 하는 보안 항목
- 검증되지 않은 데이터가 입력되는 경우 처리할 수 있도록 구현한다.
- 입력 데이터를 처리하는 객체의 자료형을 확인한다.
입력 데이터 검증 및 표현의 보안 약점
- SQL 삽입 : 입력란에 SQL을 무단삽입하여 DB를 무단 조회 및 조작한다.
- 경로 조작 및 자원 삽입 : 데이터 입출력 경로를 조작하여 서버 자원을 수정 삭제할 수 있다.
- → 입력 데이터 필터링
- 크로스사이트스크립팅 : 웹페이지에 악의적인 스크립트를 삽입하여 방문자의 정보를 탈취하거나 비정상적인 기능 수행을 유발한다.
- → HTML 태그 사용 제한
- 운영체제 명령어 삽입 : 외부 입력값으로 시스템 명령어 실행 ('rm -rf *'과 같은)시켜 권한을 탈취하거나 시스템 장애를 유발한다.
- → 외부 입력값이 검증없이 내부 입력값으로 사용되지 않게 한다.
- 위험한 형식 파일 업로드 : 악의적인 스크립트 파일을 업로드하여 시스템에 손상을 준다.
- → 파일 확장자 제한, 파일명 암호화, 웹사이트와 파일 서버 분리, 실행 속성 제거
- 신뢰되지 않는URL 주소로 자동접속 연결 : 입력값으로 사이트 주소를 받는 경우 이를 조작하여 피싱 사이트 방문을 유도한다.
- → 연결될 수 있는 사이트의 주소를 화이르 리스트로 관리한다.
보안기능
- 구현단계에서 인증, 접근 제어, 기밀성, 암호화 등이 올바르게 구현될 수 있도록 코드를 점검한다.
보안 기능 보안 약점
- 적절한 인증 없이 중요 기능 허용
- 부적절한 인가
- → 필요한 접근 권한만을 부여한다.
- 중요 자원에 대한 잘못된 권한 설정
- 취약한 암호화 알고리즘 사용
- → IT 보안인증사무국이 안정성을 확인한 암호 모듈을 이용한다.
- 중요 정보 평문 저장 및 전송
- → HTTPS, SSL과 같은 보안 채널을 이용하고 중요 정보는 반드시 암호화한다.
- 하드코드된 비밀번호 : 소스코드 유출시 이를 이용하여 정보 및 권한을 탈취할 수 있다.
- → 비밀번호는 암호화하여 별도의 파일에 저장한다.
시간 및 상태
- 동시 수행을 지원하는 병렬 처리 시스템이나 멀티 프로세스 환경에서 시간과 실행 상태를 관리해야 한다.
- 관리 미비로 인한 각종 오류를 방지해야 한다.
보안약점
- TOCTOU 경쟁 조건 : 검사 시점과 사용시점을 고려하지 않고 코딩하여 검사 시점에는 사용할 수 있었지만 사용 시점에는 사용할 수 없는 경우 동기화 요류, deadlock에 빠질 수 있다.
- → 코드 내 동기화 구문을 사용 , 락 사용 (너무 많이 사용하면 성능이 감소)
- 종료되지 않는 반복문 또는 재귀 함수 : 종료 조건을 정의하지 않거나 논리 구조가 잘못되는 경우 자원이 고갈될 수 있다.
- → 수행 횟수를 제한, 종료 조건을 점검한다.
에러처리
- 발생가능한 오류를 사전에 정의하여 오류로 인한 문제를 예방
- 예외 처리 구문을 통해 오류 사항 정의
에러 처리 미비로 인한 보안 약점
- 오류 메시지를 통한 정보 노출
- → 오류는 가능한 내부에서 처리하고 오류 메시지에 가능한 최소한의 정보만 노출한다.
- 오류 상황 대응 부재
- → 예외 발생할 수 있는 부분에 예외 처리 구문을 작성하고 제어문을 활용하여 오류가 악용되지 않도록 코딩한다.
- 부적절한 예외 처리 : 너무 광범위하게 묶어 한번에 처리하거나 누락된 예외가 있을 경우
- → 세분화하여 예외를 처리한다.
코드 오류
- 구현단계에서 코딩 중 실수하기 쉬운 요소
- 널 포인터 역참조 : 오류 발생하여 널 값을 반환하는데 이를 참조하는 경우 발생하는데 해커는 이로 인해 발생한 예외 상황을 악용할 수 있다.
- → 널이 될 수 있는 포인터를 참조하기 전에 널 여부를 확인해야 한다.
- 부적절한 자원 해제
- → 자원 반환 코드를 반드시 작성하고 오류로 인해 함수가 중간에 종료되어도 반환될 수 있도록 코딩한다.
- 해제된 자원 사용
- → 반환된 자원의 주소를 저장한 포인터를 반드시 초기화한다.
- 초기화되지 않은 변수 사용 : 이전에 해당 메모리에 있던 변수가 외부에 노출될 수 있다.
- → 변수 선언시 반드시 할당된 메모리를 초기화해야 한다.
API 오용
- 구현단계에서 API를 잘못사용하거나 보안에 취약한 API를 사용하지 않도록 점검
API오용으로 인한 보안약점
- DNS lookup에 의존한 보안 결정 : 도메인 명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우인증, 접근 통제를 우회한다.
- → DNS에 의존하지 않고 IP 주소를 직접입력하여 접근하도록 한다.
- DNS 엔트리를 속여 동일한 도메인에 속한 서버인 것처럼 위장하거나 사용자와 서버간 네트워크 트래픽을 유도하여 악성 사이트로 경유하도록 조작한다.
- 취약한 API 사용
- strcat, strcpy, sprintf
암호 알고리즘
개인키 암호화 기법 / 대칭, 단일키 (Symmetric)
동일한 키로 데이터를 암호화하고 복호화한다.
- 블록 암호화 방식 : DES, SEED, AES, ARIA
- 스트림 암호화 방식 : RC
공개키 암호화 기법 / 비대칭 (Asymmetric)
암호화할 때는 공개키, 복호화할 때는 비밀키를 사용한다.
공개키는 데이터베이스 사용자에게 공개하고, 비밀키는 관리자가 관리한다.
- RSA
해시 (Hash)
임의의 길이의 입력데이터나 메시지를 고정된 길이의 값이나 키로 변환
'컴퓨터 공학 > 정보 보호' 카테고리의 다른 글
정보 보호) SSL, HTTP, HTTPS (0) | 2022.06.09 |
---|---|
정보 보호) Classical Encryption Techniques : 암호화 기법 (0) | 2021.04.09 |
정보 보호) 기본 개념 정리 (0) | 2021.04.09 |