입력 데이터 검증 및 표현
입력 데이터로 인해 발생하는 문제들과 이를 예방하기 위한 점검 항목들
- SQL 삽입 ( SQL Injection )
- 웹에서 SQL을 의도적으로 삽입하여 DB 데이터 유출 및 변조, 관리자 인증을 우회하는 행위
- 동적 쿼리에 사용되는 입력 어를 필터링되도록 설정하는 등으로 방지
- 경로 조작 및 자원 삽입
- 데이터 입출력 경로 조작으로 서버 자원을 수정 삭제하는 행위
- 사용자 입력값을 식별자로 사용해 경로 순회 공격을 막는 필터를 사용하여 방지
- 크로스사이트 스크립팅 (XSS)
- 웹페이지에 악의적인 스크립트를 삽입하여 방문자들을 공격하는 행위
- 스크립트에 사용하는 문자를 제한 또는 치환함으로 방지
- 운영체제 명령어 삽입
- 외부 입력값을 통해 시스템 명령어 실행을 유도하여 장애를 유발하는 행위
- 인터페이스를 통해 시스템 명령어가 전달되지 않도록 방지
- 위험한 형식 파일 업로드
- 악의적인 명령어가 포함된 스크립트 파일을 업로드해서 시스템을 공격하는 행위
- 파일 확장자 제한, 파일 서버의 분리, 실행 속성 제거등으 방법으로 방지
- 신뢰되지 않는 URL 주로 소 자동접속 연결
- 입력값으로 URL을 받는 경우 이를 조작해 방문자를 피싱 사이트로 유도하는 행위
- 연결되는 외부 사이트의 주소를 화이트 리스트로 관리하므로 방지
- 메모리 버퍼 오버플로
- 연속된 메모리 공간을 사용하는 프로그램에서 의도적으로 할당된 메모리 넘어선 위치의 자료를 읽거나 쓰려고 하는 행위
- 적절한 메모리 버퍼의 크기 설정 및 설정된 범위 내에서 올바르게 읽거나 쓸 수 있게 함으로 방지
보안 기능
소프트웨어 개발에서 인증, 접근제어, 기밀성, 암호화등을 올바르게 구현하기 위한 점검 항목
- 적절한 인증 없이 중요기능 허용
- 적절한 인증을 통해 중요기능 및 정보에 접근할 수 있어야 한다.
- 중요 기능을 제공하는 서비스는 재인증 등의 기능을 수행하도록 하여 강화할 수 있다.
- 부적절한 인가
- 접근제어 기능이 없는 실행 경로를 통해 권한을 탈취하는 행위
- 모든 실행 경로에 대해 접근제어 검사를 수행하고, 사용자에게 필요한 범위에만 접근 권한을 부여해야 된다.
- 중요한 자원에 대한 잘못된 권한 설정
- 권한 설정이 잘못되어 중요한 자원에 임의로 접근할 수 있는 행위
- 중요한 자원에 대한 접근 여부를 검사함으로써 방지
- 취약한 암호화 알고리즘 사용
- 취약한 암호화 알고리즘으로 암호화가 해독되어 중요정보가 유출되는 행위
- 안정성을 확인한 암호모듈을 이용
- 중요정보 평문 저장 및 전송
- 정보 전송과정에서 의도적으로 데이터를 취득하는 행위
- 암호화 과정을 통한 전송과 보안 채널을 이용하여 방지
- 하드코드된 암호화 키
- 하드코드된 암호화 키는 역계산, 무차별 대입 공격에 의해 탈취될 가능성이 높다.
- 암호화 키 생성 모듈 또는 보안이 보장된 외부 공간을 이용함으로 방지
코드오류
개발자들이 코딩 중 실수하기 쉬운 보안 점검 항목들
- Null 포인터 역참조
- Null이 들어간 포인터에는 값을 저장할 수 없다.
- 포인터를 이용할 시 Null값을 갖고 있는지 확인하여 방지
- 부적절한 자원 해제
- 자원을 해제하지 않았을 때 보안에 취약해질 수 있다.
- 자원 코드 반환확인 및 오류로 인해 비정상 종료를 할 때도 자원을 해제할 수 있도록 하여 방지
- 해제된 자원 자용
- 이미 반환한 메모리를 참조하는 경우 문제가 될 수 있다.
- 반환된 메모리에 접근할 수 없도록 포인터를 초기화하여 방지
- 초기화되지 않은 변수 사용
- 변수 선언 후 값이 부여되지 않은 값을 사용할 때 발생하는 문제
- 변수 선언 시 할당된 메모리를 초기화해서 방지
캡슐화
캡슐화 과정에서 발생할 수 있는 보안 점검 항목들
- 잘못된 세션에 의한 정보 노출
- 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
- 지역 변수를 활용하여 변수의 범위를 제한함으로 방지
- 제거되지 않고 남은 디버그 코드
- 개발 중에 디버그를 위해 남겨둔 코드로 인한 보안 약점
- 소프트웨어 배포전 남아있는 디버그 코드를 삭제함으로 방지
- 시스템 데이터 정보 노출
- 시스템의 내부 정보를 시스템 메시지등을 통해 외부로 출력하도록 코딩했을 때 생기는 보안 약점
- 노출되는 메시지에는 최소한의 정보를 제공함으로 방지
- Public 메서드로부터 반환된 Private 배열
- 접근이 한정된 Private 배열데이터를 한정된 곳 외에서 사용할 수 있는 보안 약점
- Private 배열 데이터를 별도의 메서드를 통해 조작할 수 있도록 하여 방지
- Private 배열에 Public 데이터 할당
Commnet