2014/06/17

소프트웨어 개발 보안 체크리스트

소프트웨어 개발 시 개발자들의 실수로 인해 야기될 수 있는 47가지 취약점들

1. 입력 데이터 검증
 1) SQL injection
 2) cmd injection
 3) XSS
 4) Xpath injection
 5) xQuery injection
 6) LDAP injection
 7) CSRF
 8) 경로 조작
 9) 업로드 파일 확장자 및 형식 체크 미비
 10) 신뢰되지 않는 URL로의 자동접속 연결 (redirection)
 11) HTTP 응답 분할 (응답헤더조작)
 12) 정수형 인자값의 오버플로우 (정수 연산 사용 시 허용범위를 넘는 경우)
 13) 보안 기능(인증,인가, 권한부여 등) 결정에 사용되는 부적절한 인자값
 14) 메모리 버퍼 오버플로우
 15) 포맷 스트링 삽입 (printf 등)

2. 보안 기능 검증
 1) 적절한 인증 없이 중요 정보 열람
 2) 부적절한 인가
 3) 중요한 자원에 대한 잘못된 권한 설정
 4) 취약한 암호화 알고리즘의 사용
 5) 중요 정보 평문 저장(인증정보 등)
 6) 중요 정보 평문 전송 (예. 주민등록번호, 패스워드 등)
 7) 하드코드 된 패스워드
     - 소스코드 노출 시 패스워드 노출 뿐 아니라, 패스워드 변경이 힘들게 되는 문제도 발생함
 8) 하드코드 된 암호화 키
    - 소스코드 노출 시 암호화 키 노출 뿐 아니라, 암호화 키 변경이 힘들게 되는 문제도 발생
 9) 충분하지 않은 키 길이 사용
 10) 적절하지 않은 난수 사용으로 난수 예측가능
 11) 취약한 비밀번호 사용
  - 조금만 돌리면 다 나올 정도의 약한 패스워드 사용
 12) 사용자 하드디스크에 저장되는 파일을 통한 정보 노출 (예, 쿠키 속 인증정보 노출)
 13) 주석문 안에 시스템 주요정보 포함
  - 소스코드 노출하면 중요 시스템들의 정보가 바로 노출
 14) 솔트 없이 일방향 해쉬함수의 사용
 15) 무결성 검사 없는 코드 다운로드
 16) 반복된 인증시도에 대한 제한 기능의 부재

3. 시간 및 상태
 1) 검사 시점과 사용 시점이 다름에 따른 문제
 - 공유 자원(예.파일)에 여러 프로세스가 접근하는 경우 경쟁상태가 되어 동기화 오류, 혹은 교착상태 등이 생길 수 있음.
 2) 종료되지 않는 반복문/재귀문 사용

4. 에러 처리
 1) 오류메시지를 통한 정보 노출
 2) 오류 상황에 대한 대응 부재
 3) 부적절한 예외처리

5. 코드 오류
 1) Null pointer 역참조
 2) 부적절한 자원의 해제
 3) 해제된 자원의 사용 가능
 4) 초기화 되지 않은 변수의 사용

6. 캡슐화
 1) 잘못된 세션에 의한 데이터 정보 노출
 2) 제거되지 않고 남은 디버그 코드
 3) 시스템 데이터 정보 노출
  - 오류메시지나 스텍 정보에 디버깅 정보 등이 공개될 수 있음
 4) private 배열을 public 메소드로 반환할 때 그 배열 레퍼런스가 공개
 5) private 배열에 public 데이터 할당

7. API 오용
 1) DNS lookup에 의존한 보안결정 (DNS lookup은 공격자에 의해 쉽게 위변조)
 2) 취약한 API/함수 사용




..