secure SDLC
- 소프트웨어 개발 생명 주기에 보안을 추가한 것
세션 통제
- 세션 관리에 대한 보안 점검 항목
1. 불충분한 세션 관리
- 특정 규칙으로 세션 ID 발급 or 너무 긴 타임아웃 -> 하이제킹으로 비정상적 세션 접근가능
2. 잘못된 세션 정보 노출
- 싱글톤 패턴에서 레이스 컨디션으로 동기화 오류 or 맴버 변수 노출 ->지역변수 활용
입력 데이터 검증 및 표현
- 입력 데이터로 인한 문제 예방 보안 점검 항목
1. SQL 삽입 : 입력란에 SQL을 삽입하여 무단 DB 접근 -> 입력데이터에 예약어, 특수문자 안되도록 필터링
2. 시스템 명령어 삽입 : 웹인터페이스에서 시스템 명령어를 전달하지 않도록 방지
3. 경로조작 자원 삽입 : 데이터 입출력 경로 조작을 통한 공격 -> 필터링
4. 크로스사이트 스크립팅 : 페이지에 악의적 스크립트 삽입 -> HTML 태그 사용 제한
5. 위험한 형식 파일 업로드 : 악의적 파일 업로드 -> 확장자 제한, 실행 속성 제거
보안 기능
- 구현 단계에서 보안 점검 항목
1. 하드코드된 패스워드 : 소스 유출시 정보 유출 -> 변수 사용 변경
2. 부적절한 인가 : 접근 제어 없는 경로를 통해 접근 -> 접근 제어 검사
3. 잘못된 권한 설정 : 시스템 자원 접근 -> 관리자만 사용하도록 권한 설정
4. 중요 정보 평문 전송 : 평문 취득 정보 노출 -> 암호화후 전송
5. 취약한 보안 알고리즘 : 암호 해석 -> 강화된 알고리즘 사용
시간 및 경쟁
- 병렬 처리 환경에서 원할한 동작을 위한 보안 점검 항목
1. TOCTOU 경쟁 조건 : 검사 시점과 사용시점을 고려하지 않아 발생하는 보안약점 -> 동기화
2. 종료되지않는 반복문 : 잘못된 반복문 설계 -> 종료되도록 확인
에러처리
- 오류를 에러처리를 통해 문제예방을 위한 보안점검항목
1. 오류메시지를 통한 정보 노출 : 실제 환경, 사용자 정보 등 노출 -> 노출 메시지 최소화
2. 오류 상황 대응 부재 : 에러 처리 미비로 발생 -> 예외처리 구문작성
3. 부적절한 예외처리 : 에러를 한번에 처리하거나 세분화하지 않음 -> 세분화하여 예외처리
코드 오류
- 잘못된 코드로 인한 문제 예방 보안점검항목
1. 널포인터 역참조 : 함수가 널포인터 반환하여 사용해 발생 -> 사용전 널여부 확인
2. 해제된 자원 사용 : 자원 해제 된 메모리 참조. 잘못된 동작 발생 -> 메모리 포인터 초기화
3. 부적절한 자원 해제 : 자원이 반환 코드 누락하거나 되지 않아 자원 부족 발생 -> 자원 해제하도록 구현
4. 초기화 되지않은 변수 사용 : 부적절한 값 사용 -> 선언시초기화
캡슐화
- 캡슐화하여 정보 노출을 예방하기 위한 보안점검 항목
1. 잘못된 세션에의한 정보 노출 : 다중 스레드 환경서 싱글톤 페턴의 레이스 컨디션으로 동기화 오류 노출. 변수 제한
2. 시스템 데이터 노출
3. 제거되지 않은 디버그 코드 : 디버그 메시지가 외부 유출 -> 디버그 코드 삭제
4. public 메소드에 private 배열 반환 : private 배열에 접근가능해짐. -> 값복사하거나 메소드로 값 변경
5. private 배열에 public 데이터 할당 : private 배열을 접근 가능해짐 -> 직접 값 저장
API 오용
- API 잘못 사용하여 발생하는 문제 예방 보안점검항목
1. DNS Lookup에 의존한 보안 결정 : DNS lookup을 악용하여 접근 통제 -> dns 보다 아이피 주소로 접근
2. 취약한 API 사용 : strcat(), strcpy() 처럼 보안 취약한 함수 -> 안전한 API 사용