보안
[보안] - 소프트웨어 개발 보안
파커초
2024. 2. 3. 21:32
개요
- 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동
- 목표
- 기밀성, 무결성, 가용성
- 관련기관
- 행정안전부(총괄), 한국인터넷진흥원(KISA), 발주기관, 사업자, 감리기관
- 관련법령
- 개인정보보호법, 개인정보의 안전성 확보 조치 기준 등
Secure SDLC
- SDLC 에 보안 강화를 위한 프로세스를 포함한것
- 요구사항 분석 - 설계 - 구현 - 테스트 - 유지보수
- 보안요소
- 기밀성(비밀), 무결성(정확성), 가용성, 인증, 부인 방지 송수신 증거 제공
- 시큐어 코딩(secure coding)
- 소프트웨어의 구현 단계에서 발생할 수 있는 보안 취약점 들을 최소화하기 위한 보안 요소들을 고려하여 코드를 구현하는 것
세션 통제
- 개요: 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것
- 불충분한 세션 관리
- 잘못된 세션에 의한 정보노출
- 다중 스레드 환경에서 멤버 변수에 저장할때 발생할 수 있음
- 지역변수를 활용하여 변수의 범위를 제한한다.
- 다중 스레드 환경에서 멤버 변수에 저장할때 발생할 수 있음
- 세션 설계시 고려 사항
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성
- Time out
- 중요도가 높으면 2~5분, 그게아니면 15 ~ 30분
- Time out
- 로그아웃 요청 시 할당 된 세션이 완전히 제거 되도록 함
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성
- 세션 ID 관리방법
- 안전한 서버에서 최소 128비트로 생성, 난수알고리즘 적용
입력 데이터 검증 및 표현
- 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야함
- 보안 약점
- SQL 삽임 [무단 DB]
- 경로 조작 및 자원 삽임 [입출력]
- 크로스 사이트 스크립팅(XSS) [정보 탈취]
- 운영체제 명령어 삽임 [명령어 실행]
- 위험한 형식 파일 업로드
- 신뢰되지 않는 URL 주소로 자동접속 연결
보안 기능
- 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항복들
- 보안기능의 보안 약점
- 적절한 인증없이 중요기능 허용 → 재인증
- 부적절한 인가 → 접근제어 검사
- 중요한 자원에 대한 잘못된 권한 설정 → 인가 검사
- 취약한 암호화 알고리즘 사용 0
- 중요정보 평문 저장 및 전송 → 암호화 과정을 거치도록 함
- 하드코드된 비밀번호 → 패스워드는 반드시 암호화 하여 별도의 파일에 저장
시간 및 상태
- 개요
- 시간과 실행 상태를 관리하여 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목들
- 보안약점
- TOCTOU 경쟁 조건
- 검사 시점과 사용 시점을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
- 프로세스가 가진 자원정보와 실제 자원 상태가 일치하지 않는 동기화 오류와 교착상태 등이 발생 할 수 있음
- 코드 내에 동기화 구문을 사용하여, 해당 자원에는 한번에 하나의 프로세스만 접근 가능하도록 구성함으로써 방지 할수 있음
- 검사 시점(Time of Check), 사용 시점(Time of Use)
- 종료되지 않는 반복문 * 재귀함수
- 무한루프
- TOCTOU 경쟁 조건
에러처리
- 개요: 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들
- 보안 약점
- 오류 메세지를 통한 정보노출: 스택 트레이스 (Stack Trace) => 최소한의 정보만 노출할 수 있게함
- 오류 상황 대응 부재
- 부적절한 예외처리
- 함수에 대한 반환값, 오류등을 세부적으로 처리하지 않을경우 발생가능
코드 오류의 개요
- 소프트웨어 구현 단계에서 개발자들이 개발 중 실수하기 쉬운 형 반환, 자원 반환등의 오류를 예방하기 위한 보안 점검 항목들
- 코드 오류로 발생할 수 있는 보안 약점
- 널 포인터 역참조
- 부적절한 자원 해제
- 해제된 자원 사용
- 초기화 되지 않는 변수 사용
캡슐화
- 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목들
- 보안 약점
- 잘못된 세션에 의한 정보 노출: 멤버변수 → 지역변수
- 제거되지 않고 남은 디버그 코드
- 시스템 데이터 정보 노출
- Public 메서드로부터 반환된 Private 배열
- Private 배열에 Public 데이터 할당
API 오용
- 개요
- 소프트웨어 구현 단계에서 API 를 잘못 사용하거나 보안에 취약한 API 를 사용하지 않도록 하기 위한 보안 검증 항목
- 보안 약점
- DNS Lookup 에 의존한 보안 결정
- 방지하기 위해 IP를 직접입력
- 취약한 API 사용
- C strcat(), strcpy(), sprintf()
- DNS Lookup 에 의존한 보안 결정
- 다음은 API 오용으로 발생할 수 있는 보안 약점 중 하나에 대한 설명이다. 괄호에 들어갈 적합한 용어를 쓰시오.
암호 알고리즘
- 개요
- 평문을 암호화된 문장으로 만드는 방법
- 암호화 종류
- 양방향: 개인키, 공개키
- SEED(128bit, 256bit), ARIA(2004 년도에 국정원에서 개발), DES, AES, RSA
- 단방향: HASH
- SHA 시리즈, MD5, N-NASH, SNEFRU
- 양방향: 개인키, 공개키