본문 바로가기
반응형

04. 시큐어코딩28

시큐어코딩(28) - Missing Authentication for Critical Function 1. 정의 적절한 인증 없는 중요기능 허용 (Missing Authentication for Critical Function) 적절한 인증과정이 없이 중요정보(계좌이체 정보, 개인정보 등)를 열람(또는 변경)할 때 발생하는 보안약점이다. 2. 해결방법 - 클라이언트의 보안검사를 우회하여 서버에 접근하지 못하도록 한다. - 중요한 정보가 있는 페이지는 재인증이 적용되도록 설계하여야 한다.(은행 계좌이체 등)- 안전하다고 확인된 라이브러리나 프레임워크를 사용한다. 즉 OpenSSL 이나 ESAPI 의 보안 기능을 사용한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ========================== public void sendBankAccount(St.. 2017. 12. 1.
시큐어코딩(27) - Reliance on Untrusted Inputs in a Security Decision 1. 정의 보안결정을 신뢰할 수 없는 입력 값에 의존 (Reliance on Untrusted Inputs in a Security Decision) 응용프로그램이 외부 입력값에 대한 신뢰를 전제로 보호메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호메커니즘을 우회할 수 있게 된다. 개발자들이 흔히 쿠키, 환경변수 또는 히든필드와 같은 입력값이 조작될 수 없다고 가정하지만 공격자는 다양한 방법을 통해 이러한 입력값들을 변경할 수 있고 조작된 내용은 탐지되지 않을 수 있다. 인증이나 인가와 같은 보안결정이 이런 입력값(쿠키, 환경변수, 히든필드 등)에 의해 수행되는 경우 공격자는 이런 입력값을 조작하여 응용프로그램의 보안을 우회할 수 있으므로 충분한 암호화, 무결성 체크를 수행하거나 이러한.. 2017. 11. 24.
시큐어코딩(26) - SQL Injection: Hibernate 1. 정의 SQL 삽입공격 : Hibernate(SQL Injection: Hibernate) 외부의 신뢰할 수 없는 입력을 적절한 검사 과정을 거치지 않고 Hibernate API의 SQL 질의문 생성을 위한 문자열로 사용하면, 공격자가 프로그래머가 의도하지 않았던 문자열을 전달함으로써 질의문의 의미를 왜곡시키거나 그 구조를 변경하여 임의의 데이터베이스 명령어가 수행되도록 할 수 있다. 2. 해결방법 - 질의문의 생성 시 상수 문자열만 사용한다. 외부의 입력에 따라 질의문을 수정해야 한다면 인자를 받는 질의문을 상수 문자열로 생성한 후, 쿼리의 인자값을 setParameter(),set() 등의 메소드를 사용하여 설정한다. 3. 예제 ========================== 안전하지 않은 코드의.. 2017. 11. 23.
시큐어코딩(25) - Download of Code Without Integrity Check 1. 정의 무결성 점검 없는 코드 다운로드 (Download of Code Without Integrity Check) 원격으로부터 소스 코드 또는 실행파일을 무결성 검사 없이 다운로드 받고 이를 실행하는 제품들이 종종 존재한다. 이는 host server의 변조, DNS spoofing 또는 전송시의 코드 변조 등의 방법을 이용하여 공격자가 악의적인 코드를 실행할 수 있도록 한다. 2. 해결방법 - SW의 자동 업데이트와 같이 다운로드 될 코드를 제공할 떄는 코드에 대한 암호화된 시그니처를 사용하고 클라이언트가 시그니처를 검증하도록 한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ========================== URL[] classURLs= n.. 2017. 11. 23.
시큐어코딩(24) - Unsafe Reflection 1. 정의 안전하지 않은 리플렉션 (Use of Externally-Controlled Input to Select Classes or Code, Unsafe Reflection) 동적 클래스 적재(loading)에 외부의 검증되지 않은 입력을 사용할 경우, 공격자가 외부 입력을 변조하여 의도하지 않은 클래스가 적대되도록 할 수 있다. 2. 해결방법 - 외부의 입력을 직접 클래스 이름으로 사용하지 말고, 외부의 입력에 따리 미리 정한 후보(white list) 중에서 적절한 클래스 이름을 선택하도록 한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ========================== public void workType(){Properties prop.. 2017. 11. 23.
시큐어코딩(23) - Process Control 1. 정의 프로세스 제어 (Process Control) 신뢰되지 않은 소스나 신뢰되지 않은 환경으로부터 라이브러리를 적재하거나 명령을 실행하면, 악의적인 코드가 실행될 수 있다. 2. 해결방법 - 프로그램 내에서 라이브러리를 적재할 때 절대 경로를 사용한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ========================== public void loadLibrary() throws SecurityException, UnsatisfiedLinkError, NullPointerException{// 외부 라이브러리를 호출 시 절대 경로가 들어 있지 않다.Runtime.getRuntime().loadLibrary("libraryName");}.. 2017. 11. 23.
시큐어코딩(22) - Improper Neutralization of Script-Related HTML Tags in a Web Page , DOM 1. 정의 크로스 사이트 스크립트 공격 취약점: DOM (Improper Neutralization of Script-Related HTML Tags in a Web Page , DOM) 외부에서 입력되는 스크립트 문자열이 웹 페이지 생성에 사용되면 생성된 웹 페이지를 열람하는 사용자에게 피해를 입힐 수 있다. 2. 해결방법 - JSP의 document.write() 메소드와 같이 JSP의 DOM 객체 출력을 수행하는 메소드의 인자값으로 외부의 입력을 사용할 경우 위험한 문자를 제거하는 과정이 수행되어야 한다. - 보안성이 검증되어 있는 API를 사용하여 위험한 문자열을 제거하여야 한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ==================.. 2017. 11. 22.
시큐어코딩(21) - Eval Injection 1. 정의 동적으로 생성되어 수행되는 명령어 삽입 (Improper Neutralization of Directives in Dynamically Evaluated Code, Eval Injection) 신뢰할 수 없는 외부 입력이 적절한 검사과정을 거치지 않고 동적으로 수행되는 스크립트 또는 프로그램 명령어 문자열의 생성에 사용될 경우 의도했던 형태의 입력만 사용되도록 적절히 필터링해야 한다. 그렇지 않으면, 외부의 입력이 명령어로 사용되어 공격자는 원하는 임의의 작업을 수행할 수 있다. 2. 해결방법 - 외부의 입력이 eval() 함수의 인자로 사용될 경우 외부에서 입력되는 JavaScript가 수행되지 않도록 위험문자를 제거해야 한다. - ESAPI for Javascript 등의 보안성 있는 AP.. 2017. 11. 22.
시큐어코딩(20) - External Control of System or Configuration Setting 1. 정의 시스템 또는 구성 설정의 외부 제어 (External Control of System or Configuration Setting) 시스템 설정이나 구성요소를 외부에서 제어할 수 있으면 예상치 못한 결과를 초래하거나 악용될 가능성이 있다. 2. 해결방법 - 외부의 입력을 Connection.setCatalog() 메소드의 인자값을 생성하는데 사용하지 않도록 한다. 불가피하게 사용해야 한다면, 외부의 입력을 화이트리스트 방식으로 검사한 후 사용한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ========================== public void setCatalog(){try{InitialContext ctx = new InitialCont.. 2017. 11. 22.
반응형