[보안] 시큐어 코딩 가이드

koline·2023년 9월 18일
0

시큐어 코딩 가이드


시큐어 코딩 가이드는 설계 및 구현 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법이다.



입력 데이터 검증 및 표현


입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들이다. 프로그램 입력값에 대한 검증 누락, 부적절한 검증, 잘못된 형식 지정 등에 의해 발생하므로 알맞은 유효성 검증 체계를 갖추고, 검증되지 않은 데이터의 입력을 처리할 수 있도록 구현해야 한다.

관련 취약점

XSS (Cross Site Scripting)

검증되지 않은 외부 입력 데이터가 포함된 웹페이지가 전송되는 경우, 사용자가 해당 웹페이지를 열람함으로써 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격

  • Stored XSS: 방문자들이 악성 스크립트가 포함된 페이지를 읽어 봄과 동시에 스크립트가 실행되면서 감염
  • Reflected XSS: 공격용 악성 URL을 생성한 후 이메일로 사용자에게 전송하면 사용자가 URL 클릭 시 즉시 공격 스크립트가 피해자로 반사되어 접속 사이트에 민감정보를 공격자에게 전송하는 기법
  • DOM XSS: DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 조작된 URL을 이메일로 발송하고 피해자가 클릭시 감염되는 기법

대책

  1. 특수문자 필터링
  2. HTML 태그 사용 시 변환 처리
  3. 자바스크립트로 시작하는 문자열은 모두 문자열 변환 처리

사이트 간 요청 위조 (CSRF; Cross-Site Request Forgery)

사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격

XSS와 유사하지만 XSS의 경우 공격자는 게시판 등에 악성 스크립트가 포함된 게시물을 게시하고, 사용자가 해당 게시물을 열람할 경우 해당 스크립트가 바로 실행되며 공격을 가하는 반면,

CSRF의 경우 사용자가 해당 게시물을 열람할 경우 공격자가 의도한 요청을 사용자의 권한을 이용해 서버에 보내는 형태로 이뤄진다.

대책

  1. GET 방식보다 POST 방식을 이용
  2. 입력 폼 처리시 CSRF 토큰을 사용하여 검사
  3. 중요기능의 경우 재인증 요구

SQL 삽입 (Injection)

응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행 시켜서 데이터베이스의 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격기법

대책

  1. 바인딩 매개변수 방식 적용하여 사전에 변수타입을 명시적으로 지정
  2. 사용자로부터 입력될 수 있는 모든 값을 체크하여 필터링
  3. Servlet Filter 기능 적용 (Java)



보안 기능


보안 기능은 소프트웨어 개발 단계에서 인증, 접근제어, 기밀성, 암호화, 권한 관리 등을 적절하게 구현하기 위한 보안 점검 항목들이다.

관련 취약점

적절한 인증 없이 중요 기능 허용

보안 검사를 우회하여 인증과정 없이 중요정보 또는 기능에 접근 및 변경이 가능

부적절한 인가

접근제어 기능이 없는 실행경로를 통해 정보 또는 권한 탈취

취약한 암호화 알고리즘 사용

암호화된 환경설정 파일을 해독하여 중요 정보 획득 가능

중요 정보 평문 저장 및 전송

암호화되지 않은 평문 데이터를 탈취하여 중요 정보 획득 가능

하드 코드 된 비밀번호

프로그램 코드 내부에 패스워드 포함 시 관리자 정보가 노출될 수 있음

취약한 패스워드 요구 조건

취약한 사용자 패스워드 조합 규칙에 따른 사용자 계정 보안 취약점




시간 및 상태


거의 동시에 수행 지원하는 병렬 시스템 또는 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절한 관리




에러 처리


프로그램 실행 시 발생하는 에러를 예외 처리하지 못하거나, 에러 정보에 중요한 정보(프로그램 정보, 상세한 에러 내역 등)가 포함될 때 발생할 수 있는 취약점을 예방하기 위한 보안 점검 항목들이다.

관련 취약점

오류 메시지 통한 정보 노출

프로그램이 실행환경, 사용자, 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 공격자의 악성 행위를 도와주는 보안 취약점

오류 상황 대응 부재

오류가 발생할 수 있는 부분을 확인 하였으나, 이러한 오류에 대하여 예외 처리를 하지 않았거나 미비로 인해 발생하는 보안 약점

적절하지 않은 예외 처리

프로그램 수행 중에 함수의 결괏값에 대한 적절한 처리 또는 예외상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 일으킬 수 있는 보안 약점




코드 오류


소프트웨어 구현 단계에서 프로그램 변환 시 오류, 서버의 리소스 자원의 부적절한 반환(버퍼 오버플로우) 등 개발자가 흔하게 실수하는 프로그램 오류를 예방하기 위한 보안 점검 항목들이다.

관련 취약점

널 포인터 역참조

Null인 객체를 참조할 경우 소프트웨어가 비정상 적으로 종료

정수를 문자로 변환

정수를 문자로 변환하면서 표현할 수 없는 범위의 값이 잘려나가 문자에 대한 저장 값이 올바르지 않아지는 보안 취약점

부적절한 자원 해제

힙 메모리, 소켓 등 프로그램 자원 사용 후, 프로그램 오류로 인해 종료된 자원을 반환하지 못했을 때 발생하는 보안 취약점

초기화되지 않은 변수 사용

변수가 선언되어 메모리가 할당되면 해당 메모리에 이전에 사용하던 내용이 계속 남아있어 변수가 외부에 노출되는 경우 중요 정보가 악용될 수 있음




캡슐화


외부에 은닉이 필요한 중요한 데이터와 필요한 기능성을 불충분하게 캡슐화 했을 때 인가되지 않은 사용자에게 데이터 유출, 권한 문제 등이 발생할 수 있는 취약점 에방을 위한 보안 검증 항목

관련 취약점

잘못된 세션에 의한 데이터 정보 노출

다중 스레드 환경에서 싱글톤 객체 필드에서 경쟁 조건으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출되는 보안 취약점

제거되지 않고 남은 디버그 코드

디버깅 목적으로 삽입된 코드가 제거 되지 않음으로 인해 공격자에게 의도하지 않은 정보와 제어 정보가 누출될 수 있는 보안 취약점

민감한 데이터를 가진 내부 클래스 사용

권한이 없는 클래스를 사용하고자 할 때 발생하는 취약점

시스템 데이터 정보 노출

시스템/관리자 DB 정보 등 시스템의 내부 데이터를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생




API 오용


서비스에서 제공되는 이용에 반하는 방법으로 API를 이용하거나 보안에 취약한 API를 오용하여 발생할 수 있는 보안 취약점 예방을 위한 보안 검증 항목들

관련 취약점

DNS Lookup에 의존한 보안 결정

도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 DNS 엔트리를 속여 동일한 도메인에 속한 서버인 것처럼 위장하거나, 사용자와 서버 간의 네트워크 트래픽을 유도하여 악성 사이트를 경유하도록 조각할 수 있음

위험하다고 알려진 함수 사용

사용 자체가 보안에 취약한 함수 사용

널 매개변수 미검사

자바 표준에서 특정 메소드 사용시 매개변수가 Null인 경우 지정된 값을 반환하지 못해 발생하는 예기치 못한 동작에 대한 보안 취약점




참고


[보안] 소프트웨어 개발 보안

profile
개발공부를해보자

0개의 댓글

관련 채용 정보