[Java secure coding] 자바 시큐어코딩 기법 (1)
Secure coding
사용자가 입력한 데이터는 신뢰할 수 없음을 전제로 개발에 착수해야 함
- 보안을 강화하기 위한 코딩이라고 보면 됨
- 웹 애플리케이션에 취약한 부분을 보완하고 강화하기 위함
- 운영과 유지보수에서도 굉장히 중요한 내용으로 판단됨
--> 행정자치부 한국인터넷진흥원(KISA)에서 발표한 SW 보안 가이드에 따라 7가지 분류가 존재함
- 한국 인터넷진흥원 기술 안내서 가이드
https://iamfreeman.tistory.com/entry/한국인터넷진흥원KISA-기술안내서-가이드 - 2020 자바 시큐어코딩 기준
https://www.kisa.or.kr/public/laws/laws3_View.jsp?cPage=6&mode=view&p_No=259&b_No=259&d_No=55&ST=T&SV=
시큐어 코딩 기법: 개요
(1) 입력데이터 검증 및 표현
프로그램 입력 값에 대한 검증 누락 혹은 부적절한 검증, 데이터의 잘못된 형식지정으로 발생할 수 있는 보안 약점
(2) 보안 기능
인증, 접근제어, 기밀성, 암호화, 권한관리 등을 적절하지 않게 구현할 경우 발생할 수 있는 보안 약점
(3) 시간 및 상태
동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리해 발생할 수 있는 보안 약점
(4) 에러처리
에러 처리하지 않거나 불충분하게 처리해 에러 정보에 중요 정보가 포함될 때 발생할 수 있는 보안 약점
(5) 코드 오류
타입변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안 약점
(6) 캡슐화
중요한 데이터 또는 기능성을 불충분하게 캡슐화하였을 때, 인가되지 않는 사용자에게 데이터 누출이 가능해지는 보안 약점
(7) API 오용
의도된 사용에 반하는 방법으로 API를 사용하거나 보안에 취약한 API를 사용해 발생할 수 있는 보안 약점
시큐어 코딩 기법: 입력 데이터 검증 및 표현
- 개발자는 코딩할 때, 반드시 클라이언트(사용자)로 부터 입력된 값을 신뢰할 수 없음을 인지하고 검증작업을 수행해야 함
- 검증하지 않은 경우 아래와 같은 취약점 발생
- 소프트웨어 보안 취약점 정보 : OWASP top 10
- OWASP
- The Opne Web Application Security Project
- 오픈소스 웹 어플리케이션 보안 프로젝트
- 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 증을 연구함
- 10대 웹 어플리케이션의 취약점 OWASP top 10 발표
https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/
- OWASP 2021 기준
- SQL 삽입 : 보호 메커니즘을 우회할 수 있는 입력 값 변조
- 자원 삽입 : SQL 삽입 공격 ( JDO )
- 크로스 사이트 스크립트 : SQL 삽입 공격 ( Persistence )
- 운영체제 명령어 삽입 : SQL 삽입 공격 ( MyBatis Data Map )
- 파일 업로드
- 신뢰하지 않는 URL로 자동 접속 연결 : 시스템 또는 구성 설정의 외부 제어
- XQuery 삽입 : 크로스 사이트 스크립트 공격 취약점(DOM)
- XPath 삽입 : 동적으로 생성되어 수행되는 명령어 삽입
- LDAP 삽입 : 프로세스 제어
- 크로스 사이트 요청 위조 : 안전하지 않은 리플렉션
- 디렉터리 경로 조작 : 무결성 점검없는 코드 다운로드
- HTTP 응답 분할 : SQL 삽입 공격 ( hibernate)
- 정수 오버플로우 : 보안결정을 신뢰할 수 없는 입력 값에 의존
소프트웨어 개발 보안 방법론
사례 1) 마이크로소프트 MS-SDL
사례 2) Gray McGraw의 "Software Security : Building Security in" 책에서 제시한 Sevene Touch Points
사례 3) CLASP : 소프트웨어 개발 생명주기 초기 단계에 보안강화를 목적으로 하는 정형화된 프로세스