시큐어코딩 보안항목
(내용 출처 : 한국인터넷진흥원 - 소프트웨어 개발보안 가이드 2019. 11 발간된 내용을 기준으로 간단하게 정리하였습니다.)
시큐어코딩에 대해서 스터디 중이다.
유형 |
보안약점 |
대책 |
입력데이터 검증 및 표현 |
SQL 삽입 (injection) |
외부입력값 유효성 검증 |
입력데이터 검증 및 표현 |
경로 조작 및 자원 삽입 |
경로조작 문자열이 있는지 확인 후 파일 처리 |
입력데이터 검증 및 표현 |
크로스사이트 스크립트 |
외부 입력값을 필터링 |
입력데이터 검증 및 표현 |
운영체제 명령어 삽입 |
외부 입력값에 대해 정규식 등을 이용하여 검증 |
입력데이터 검증 및 표현 |
위험한 형식 파일 업로드 |
파일 타입과 크기를 제한 |
입력데이터 검증 및 표현 |
신뢰되지 않는 URL 주소로 자동접속 연결 |
외부 입력값이 로컬 URL 인지 확인 |
입력데이터 검증 및 표현 |
XQuery 삽입 |
문자열 필터링을 통해 위험한 문자열을 제거 |
입력데이터 검증 및 표현 |
XPath 삽입 |
입력데이터에 대하여 필터링 수행 |
입력데이터 검증 및 표현 |
LDAP 삽입 |
인증 후에 LDAP 쿼리 수행 |
입력데이터 검증 및 표현 |
크로스사이트 요청 위조 |
POST 방식을 사용 |
입력데이터 검증 및 표현 |
HTTP 응답분할 |
요청 파라미터의 값을 HTTP 응답헤더에 포함시킬 경우 개행문자를 제거 |
입력데이터 검증 및 표현 |
정수형 오버플로우 |
오버플로우의 발생 여부 및 크기 확인 |
입력데이터 검증 및 표현 |
보안기능 결정에 사용되는 부적절한 입력값 |
사용자의 인증정보를 세션에 저장 |
입력데이터 검증 및 표현 |
메모리 버퍼 오버플로우 |
적절한 버퍼의 크기를 설정 |
입력데이터 검증 및 표현 |
포맷 스트링 삽입 |
%s 포맷 문자열을 지정 |
보안기능 |
적절한 인증 없는 중요기능 허용 |
재인증 적용 |
보안기능 |
부적절한 인가 |
운영자 권한 검사 후 개별 액션에 접근 |
보안기능 |
중요한 자원에 대한 잘못된 권한 설정 |
중요자원은 SW 관리자에 의해서만 읽고 쓰기가 가능하도록 설정 |
보안기능 |
취약한 암호화 알고리즘 사용 |
검증된 표준화 알고리즘 사용 |
보안기능 |
중요정보 평문저장 |
중요정보 암호화 저장 |
보안기능 |
중요정보 평문전송 |
중요정보 암호화 전송 |
보안기능 |
하드코드된 비밀번호 |
암호화된 패스워드를 사용 |
보안기능 |
충분하지 않은 키 길이 사용 |
2048 비트 이상의 길이를 가진 키 사용 |
보안기능 |
적절하지 않은 난수값 사용 |
암호학적으로 보호된 SecureRandom 을 사용 |
보안기능 |
하드코드된 암호화 키 |
상수가 아닌 암호화 키를 사용 |
보안기능 |
취약한 비밀번호 허용 |
강한 조건 검증 |
보안기능 |
사용자 하드디스크에 저장되는 쿠키를 통한 정보노출 |
쿠키 만료시간 최소 설정 |
보안기능 |
주석문 안에 포함된 시스템 주요정보 |
주석에 주요 정보 기입하지 않음 |
보안기능 |
솔트 없이 일방향 해쉬함수 사용 |
해쉬에 솔트 적용 |
보안기능 |
무결성 검사 없는 코드 다운로드 |
해쉬 값 등을 사용하여 다운로드 받은 파일 무결성 검사 |
보안기능 |
반복된 인증시도 제한 기능 부재 |
연속적인 사용자 인증 시도에 대한 횟수를 제한 |
시간 및 상태 |
경쟁조건 : 검사시점과 사용시점(TOCTOU) |
멀티쓰레드 환경에서 동시에 접근할 수 없도록 사용 |
시간 및 상태 |
종료되지 않는 반복문 또는 재귀함수 |
재귀 호출 횟수를 제한 |
에러처리 |
오류 메시지를 통한 정보노출 |
오류 메시지 최소한 정보만 포함 |
에러처리 |
오류 상황 대응 부재 |
적절한 예외 처리 |
에러처리 |
부적절한 예외 처리 |
구체적인 예외 처리 |
코드오류 |
Null Pointer 역참조 |
null 검사 수행 |
코드오류 |
부적절한 자원 해제 |
자원 해제 반환 |
코드오류 |
해제된 자원 사용 |
해제 후 null 할당 |
코드오류 |
초기화되지 않은 변수 사용 |
변수 사용 전 초기화 |
캡슐화 |
잘못된 세션에 의한 데이터 정보노출 |
변수 범위 주의 |
캡슐화 |
제거되지 않고 남은 디버그 코드 |
디버그 코드 삭제 |
캡슐화 |
시스템 데이터 정보노출 |
시스템 내부 정보가 출력되지 않도록 개발 |
캡슐화 |
Public 메소드부터 반환된 Private 배열 |
Private 를 반환하지 않도록 개발 |
캡슐화 |
Private 배열에 Public 데이터 할당 |
객체가 클래스의 private member 를 수정하지 않도록 개발 |
API 오용 |
DNS lookup에 의존한 보안결정 |
보안결정에서 도메인명을 이용한 DNS lookup 을 하지 않도록 함 |
API 오용 |
취약한 API 사용 |
취약한 API를 사용하지 않음 |