본문 바로가기

about Security/SECURE CODING17

[캡슐화] Private 배열에 Public 데이터 할당 (5등급) 0. 개요 public으로 선언된 메소드의 인자가 private 선언된 배열에 저장되면, private배열을 외부에서 접근하여 배열수정과 객체 속성변경이 가능해진다. 1. 보안 대책 - public으로 선언된 메서드의 인자를 private 선언된 배열로 저장되지 않도록 한다. : 인자로 들어온 배열의 복사본을 생성하고 clone() 메소드를 통해 복사된 원소를 저장하도록 하여 private변수에 할당하여 private선언된 배열과 객체속성에 대한 의도하지 않게 수정되는 것을 방지한다. - 배열 객체의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 인자로 들어온 배열의 복사본을 생성하여 할당한다. - 전달받은 public 배열의 레퍼런스 대신 값을 private 배열에 할당한다. 2. 진단.. 2021. 8. 10.
[캡슐화] Public 메소드부터 반환된 Private 배열 (5등급) 0. 개요 private로 선언된 배열을 public으로 선언된 메소드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열수정과 객체 속성변경이 가능해진다. 1. 보안 대책 - private로 선언된 배열을 public으로 선언된 메소드를 통해 반환하지 않도록 한다. : private 배열에 대한 복사본을 반환하도록 하고 배열의 원소에 대해서는 clone() 메소드를 통해 복사된 원소를 저장하도록 하여 private 선언된 배열과 객체속성에 대한 의도하지 않게 수정되는 것을 방지 한다. - 배열의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 Private 배열의 복사본 을 만들고 이를 반환하도록 작성한다. - private 배열을 수정해야 할 경우 별도의.. 2021. 8. 10.
[캡슐화] 시스템데이터 정보 노출 (5등급) 0. 개요 시스템, 관리자, DB정보 등 시스템의 내부 데이터가 공개되면, 공격자에게 또 다른 공격의 빌미를 제공하게 된다. 1. 보안 대책 - 예외 상황이 발생할 때 시스템의 내부 정보가 화면에 출력되지 않도록 개발한다. - getMessage() 메서드의 사용을 제한한다. : Exception 발생 시 오류와 관련된 정보가 노출될 수 있기 때문. 2. 진단 방법 - 시스템 정보 출력 코드가 존재하는지 확인한다. 3. 코드 예시 # 1 - 제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA) 예외 발생 시 getMessage()를 이용한 오류메시지를 통해 오류와 관련된 시스템 정보 등 민감한 정보가 유출될 수 있다. * e.getMessage() : 자바에서 전달한 인스턴스의 메소드 .. 2021. 8. 10.
[보안기능] 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 (5등급) 0. 개요 대부분의 웹 응용프로그램에서 쿠키는 메모리에 상주하며, 브라우저의 실행이 종료되면 사라진다. 프로그래머가 원하는 경우, 브라우저 세션에 관계없이 지속적으로 저장되도록 설정할 수 있으며, 이것은 디스크에 기록되고, 다음 브라우저 세션이 시작되었을 때 메모리에 로드된다. 개인정보, 인증 정보 등이 이와 같은 영속적인 쿠키(Persistent Cookie)에 저장된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되며, 이는 시스템을 취약하게 만든다. 1. 보안 대책 - 쿠키의 만료시간은 세션이 지속되는 시간을 고려하여 최소한으로 설정한다. - 영속적인 쿠키에는 사용자 권한 등급, 세션 ID 등 중요 정보가 포함되지 않도록 한다. 2. 진단 방법 - 쿠키를 사용하는지 확인한다. - 쿠.. 2021. 8. 10.
[에러처리] 부적절한 예외 처리 (5등급) 0. 개요 프로그램 수행 중에 함수의 결과값에 대한 적절한 처리 또는 예외 상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 야기할 수 있다. 1. 보안 대책 - 값을 반환하는 모든 함수의 결과값을 검사하여, 의도한 값을 반환하는지 확인한다. - 예외처리를 사용하는 경우 광범위한 예외 처리 대신 구체적인 예외처리를 수행한다. 2. 진단 방법 - 예외처리 로직을 확인한다. - 예외처리를 구체적으로 나누어 처리하는지 확인한다. 3. 코드 예시 소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원 # 1 - 제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA) # 1 + 제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAVA) # 2 - 제.. 2021. 8. 10.
[보안기능] 주석문 안에 포함된 시스템 주요 정보 (5등급) 0. 개요 패스워드와 같은 시스템의 중요한 정보를 주석문 안에 (개발자의 편의를 위해서)적어두는 경우, 소프트웨어가 완성된 경우에는 이것을 제거하는 것이 매우 어려워지며 공격자가 소스코드에 접근할 수 있다면, 아주 쉽게 시스템에 침입할 수 있다. 1. 보안 대책 - 주석에는 ID, 패스워드 등 보안과 관련된 내용을 기입하지 않는다. 2. 진단 방법 - DB접속, 관리자 로그인 등이 구현된 코드 확인 - 주석에 중요 정보가 포함되어 있는지 확인 3. 코드 예시 소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원 # 1 - 제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA) # 1 + 제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAVA) # 2 - 제.. 2021. 8. 10.
[캡슐화] 잘못된 세션에 의한 데이터 정보 노출 (5등급) 0. 개요 다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁 조건(Race Condition)이 발생할 수 있다. 따라서 다중 스레드 환경인 JAVA의 서블릿(Servlet) 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여, 서로 다른 세션에서 데이터를 공유하지 않도록 한다. 1. 보안 대책 - 싱글톤 패턴을 사용하는 경우, 변수 범위에 주의를 기울인다. : 특히 JAVA개발 경우 HttpServlet클래스의 하위클래스에서 멤버 필드를 선언하지 않도록 하고, 필요한 경우 지역 변수를 선언하여 사용한다. 2. 진단 방법 - HttpSerlvet / JSP / Controller 에서 멤버변수를 사용하는지 확인 3. 코드 예시 # 1 - 잘못된 세션에 의한 데이터 정보 노출 - 안.. 2021. 8. 10.
[에러처리] 오류 메세지를 통한 정보 노출 (5등급) 0. 개요 예외 발생 시 예외 이름이나 스택 트레이스를 출력하는 경우, 프로그램 내부구조를 쉽게 파악할 수 있기 때문에 응용프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 외부에 제공하는 경우, 공격자의 악성 행위를 도울 수 있다. 1. 보안 대책 - 오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함하도록 한다. - 소스코드에서 예외 상황은 내부적으로 처리하고 민감한 정보를 포함하는 오류를 사용자에게 출력하지 않도록 미리 정의된 메시지를 제공하도록 설정한다. - printStackTrace() 메서드를 사용하지 않도록 로직 구현 2. 진단 방법 - 오류 메시지를 출력하는지 확인 - 오류메시지에 시스템 환경 / 유저 정보 / 데이터 등의 민감한 .. 2021. 8. 10.
[시간 및 상태] 종료되지 않는 반복문 또는 재귀 함수 (5등급) 0. 개요 재귀의 순환횟수를 제어하지 못하여 할당된 메모리나 프로그램 스택 등의 자원을 과다하게 사용하면 위험하다. 대부분의 경우, 귀납 조건이 없는 재귀함수는 무한루프에 빠져 자원고갈을 유발하여 시스템의 정상적인 서비스를 제공할 수 없게 한다. 1. 보안 대책 - 모든 재귀 호출 시, 재귀 호출 횟수를 제한하거나, 초기값을 설정(상수)하여 재귀호출을 제한한다. 2. 진단 방법 - 재귀함수의 사용여부를 확인 - 재귀함수 내의 제어문을 통해 종료가 가능한지 확인 3. 코드 예시 소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원 # 1 - 제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA) # 1 + 제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAV.. 2021. 8. 10.