본문 바로가기
반응형

전체 글188

시큐어코딩(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.
시큐어코딩(19) - LDAP Manipulation 1. 정의 LDAP 처리 (LDAP Manipulation) LDAP 질의문이나 결과로 외부 입력이 부분적으로 적절한 처리없이 사용되면 LDAP 질의문이 실행될 때 공격자는 LDAP 질의문의 내용을 마음대로 변경할 수 있다. 특히 여기서는 LDAP 질의문 자체에 외부 입력이 영향을 주는 경우를 말한다. 2. 해결방법 - 외부 입력에 대한 적절한 유효성 검증 후 사용해야 하며, LDAP 사용시 질의문을 제한하여 허용된 레코드만을 접근하도록 하는 접근 제어 기능을 사용해야 한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ========================== try{// 외부로 부터 입력을 받는다.String name = props.getProperty(“.. 2017. 11. 22.
시큐어코딩(18) - SQL Injection: mybatis Data Map 1. 정의 SQL 삽입공격 : mybatis Data Map(SQL Injection: mybatis Data Map) 외부에서 입력된 값이 질의어의 인자값으로만 사용되지 않고, 질의 명령어에 연결되는 문자열로 사용되면, 공격자가 의도하지 않았던 문자열을 전달함으로써 질의문의 의미를 왜곡시키거나 그 구조를 변경하여 임의의 데이터베이스 명령어를 수행할 수 있다. 2. 해결방법 - 외부의 입력으로부터 위험한 문자나 의도하지 않았던 입력을 제거하는 코드를 프로그램 내에 포함시킨다.- mybatis Data Map 파일의 인자를 받는 질의 명령어 정의시에 문자열 삽인 인자($...$)를 사용하지 않는다. 즉 ## 형태의 질의문을 사용한다. 3. 예제 ========================== 안전하지 않은.. 2017. 11. 18.
시큐어코딩(17) - SQL Injection: Persistence 1. 정의 SQL 삽입공격 : Persistence(SQL Injection: Persistence) J2EE Persistence API를 사용하는 응용프로그램에서 외부 입력에 대한 검증없이 질의문에 그대로 사용하면, 질의문의 의미를 왜곡시키거나 그 구조를 변경하여 임의의 질의 명령어가 수행될 수 있다. 2. 해결방법 - 외부의 입력이 질의문의 구조를 변경할 수 없는 인자화된 질의문(Parameterize Query)을 사용한다. 즉, 질의문의 생성시 상수 문자열만을 사용하고 javax.persistence.Query.setParameter() 메소드를 사용하여 인자값을 설정하는 방법을 사용한다. 3. 예제 ========================== 안전하지 않은 코드의 예 ============.. 2017. 11. 18.
시큐어코딩(16) - SQL Injection: JDO 1. 정의 SQL 삽입공격 : JDO (SQL Injection: JDO) 외부의 신뢰할 수 없는 입력을 적절한 검사 과정을 거치지 않고 JDO(Java Data Objects) API의 SQL 또는 JDOQL 질의문 생성을 위한 문자열로 사용하면, 공격자가 프로그래머가 의도하지 않았던 문자열을 전달함으로써 질의문의 의미를 왜곡시키거나 그 구조를 변경하여 임의의 질의 명령어를 수행할 수 있다. 2. 해결방법 - JDO 질의문의 생성시에는 상수 문자열만을 사용하고 Query.execute(...) 실행시에는 인자값을 전달하는 방법(Parameterize Query)을 사용한다. 3. 예제 ========================== 안전하지 않은 코드의 예 =========================.. 2017. 11. 18.
시큐어코딩(15) - Reliance on Untrusted Inputs in a Security Decision 1. 정의 보호 메커니즘을 우회할 수 있는 입력값 변조 (Reliance on Untrusted Inputs in a Security Decision) 응용프로그램이 외부 입력값에 대한 신뢰를 전제로 보호메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호메커니즘을 우회할 수 있게 된다. 개발자들이 흔히 쿠키, 환경변수 또는 히든필드와 같은 입력값이 조작될 수 없다고 가정하지만 공격자는 다양한 방법을 통해 이러한 입력값들을 변경할 수 있고 조작된 내용은 탐지되지 않을 수 있다. 인증이나 인가와 같은 보안결정이 이런 입력값(쿠키, 환경변수, 히든필드 등)을 기반으로 수행되는 경우 공격자는 이런 입력값을 조작하여 응용프로그램의 보안을 우회할 수 있으므로 충분한 암호화, 무결성 체크 또는 다른 메.. 2017. 11. 18.
시큐어코딩(14) - Integer Overflow or Wraparound 1. 정의 정수 오버플로우 (Integer Overflow or Wraparound) 정수형 변수의 오버플로우는 정수값이 증가하면서 java에서 허용된 가장 큰 값보다 더 커져서 실제 저장되는 값은 의도하지 않게 아주 작은 수이거나 음수가 될 수 있다. 특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용자가 제공하는 입력값을 사용하고 그 과정에서 정수 오버플로우가 발생하는 경우 보안상 문제를 유발할 수 있다. 2. 해결방법 - 언어/플랫폼 별 정수타입의 범위를 확인하여 사용한다. 정수형 변수를 연산에 사용하는 경우 결과값이 범위 체크하는 모듈을 사용한다. 특히 외부 입력값을 동적으로 할당하여 사용하는 경우 값 범위를 검사하여 적절한 범위 내에 존재하는 값인지 확인한다. 3. 예제 ==.. 2017. 11. 17.
시큐어코딩(13) - HTTP Response Splitting 1. 정의 HTTP 응답 분할 (Improper Neutralization of CRLF Sequences in HTTP Headers, HTTP Response Splitting) HTTP 요청에 들어 있는 인자값이 HTTP 응답헤더에 포함되어 사용자에게 다시 전달 될 때 입력값에 CR(Carriage Return)이나 LF(Line Feed)와 같은 개행문자가 존재하면 HTTP 응답이 2개 이상으로 분리될 수 있다. 이 경우 공격자는 개행문자를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드를 주입하여 XSS 및 캐시 훼손(cache poisoning) 공격 등을 수행할 수 있다. 2. 해결방법 - 외부에서 입력된 인자값을 사용하여 HTTP 응답헤더(Set Cookie 등)에 포함시.. 2017. 11. 17.
시큐어코딩(12) - Absolute Path Traversal 1. 정의 절대 디렉토리 경로 조작 (Absolute Path Traversal) 외부 입력이 파일 시스템을 조작하는 경로를 직접 제어할 수 있거나 영향을 끼치면 위험하다. 사용자 입력이 파일 시스템 작업에 사용되는 경로를 제어하는 것을 어용하면, 공격자가 응용프로그램에 치명적인 시스템 파일 또는 일반 파일을 접근하거나 변경할 가능성이 존재한다. 즉, 경로 조작을 통해서 공격자가 허용되지 않은 권한을 획득하여, 설정에 관계된 파일을 변경할 수 있거나 실행시킬 수 있다. 2. 해결방법 - 외부의 입력을 통해 파일이름의 생성 및 접근을 허용하지 말고, 외부 입력에 따라 접근이 허용된 파일의 리스트에서 선택하도록 프로그램을 작성하는 것이 바람직하다. 3. 예제 ========================== .. 2017. 11. 17.
반응형