포맷 스트링 삽입 정의 외부로부터 입력된 값을 검증하지 않고 입·출력 함수의 포맷 문자열로 그대로 사용하는 경우 발생할 수 있는 보안약점 공격자는 포맷 문자열을 이용해 취약한 프로세스를 공격하거나 메모리 내용을 읽고 쓸 수 있으며, 이를 통해 취약한 프로세스의 권한을 취득해 임의의 코드를 실행 안전한 코딩기법 포맷 문자열을 처리하는 함수 사용 시 사용자 입력값을 직접적으로 포맷 문자열로 사용하거나 포맷 문자열 생성에 포함시키지 않아야 한다. 사용자로부터 입력받은 데이터를 포맷 문자열로 사용하고자 하는 경우에는 서식 지정자를 포함하지 않거나 파이썬의 내장함수 또는 내장변수 등이 포함되지 않도록 해야 한다. 코드예제 외부에서 입력받은 문자열을 바로 포맷스트링으로 사용하면 내부 정보가 외부로 노출될 수 있는 ..
보안기능 결정에 사용되는 부적절한 입력값 정의 응용 프로그램이 입력값에 대한 신뢰를 전제로 보호 메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호 메커니즘을 우회할 수 있게 된다. 개발자들이 흔히 쿠키, 환경변수 또는 히든필드와 같은 입력값이 조작될 수 없다고 가정하지만 공격자는 다양한 방법을 통해 이러한 입력값들을 변경할 수 있고 조작된 내용은 탐지되지 않을 수 있다. 안전한 코딩기법 상태 정보, 민감한 데이터, 중요 정보는 서버에 저장하고 보안확인 절차도 서버에서 실행 신뢰할 수 없는 입력값이 응용 프로그램 내부로 들어올 수 있는 지점을 검토하고, 민감한 보안 기능 실행에 사용되는 입력값을 식별해 입력값에 대한 의존성을 없애는 구조로 변경 가능한지 분석 코드예제 다음은 안전하지 않은 ..
정수형 오버플로우 정의 정수형 크기가 고정된 상태에서 변수가 저장할 수 있는 범위를 넘어선 값을 저장하려 할 때 실제 저장되는 값이 의도치 않게 아주 작은 수 또는 음수가 되어 프로그램이 예기치 않게 동작하게 되는 취약점 안전한 코딩기법 기본 파이썬 자료형을 사용하지 않고 패키지에서 제공하는 데이터 타입을 사용할 경우 해당 패키지에서 제공하는 데이터 타입의 표현 방식과 최대 크기를 반드시 확인 코드예제 다음 코드는 안전하지 않은 코드예제로, 거듭제곱을 계산해 그 결과를 반환하는 코드입니다. 계산 가능한 숫자에 대한 검증이 없어 에러는 발생하지 않지만, 반환값을 처리하는 함수에서 예기치 않은 오류가 발생할 수 있습니다. import numpy as np def handle_data_bad(num, pow)..
HTTP 응답분할 정의 HTTP 요청 내의 파라미터가 HTTP 응답 헤더에 포함되어 사용자에게 다시 전달될 때, 입력값에 CR이나 LF와 같은 개행문자가 존재하면 HTTP 응답이 2개 이상으로 분리될 수 있다. 이 경우 공격자는 개행문자를 이용해 첫 번째 응답을 종료 시키고, 두 번째 응답에 악의적인 코드를 주입해 XSS 및 캐시훼손(Cache Poisoning) 공격 등을 수행할 수 있다. * CR(Carriage Return) : \r , LF(Line Feed) : \n 안전한 코딩기법 요청 파라미터의 값을 HTTP 응답 헤더(예를 들어, Set-Cookie 등)에 포함시킬 경우 CR, LF와 같은 개행문자를 제거해야 한다. 외부 입력값이 헤더, 쿠키, 로그 등에 사용될 경우에는 항상 개행 문자를 ..
서버사이드 요청 위조 정의 적절한 검증 절차를 거치지 않은 사용자 입력값을 내부 서버간의 요청에 사용해 악의적인 행위가 발생할 수 있는 보안약점 안전한 코딩기법 식별 가능한 범위 내에서 사용자의 입력값을 다른 시스템의 서비스 호출에 사용하는 경우, 사용자의 입력값을 화이트리스트 방식으로 필터링한다. 부득이하게 사용자가 지정하는 무작위의 URL을 받아들여야 하는 경우라면 내부 URL을 블랙리스트로 지정하여 필터링한다. 코드예제 아래 코드는 안전하지 않은 코드로, 사용자로부터 입력된 URL 주소를 검증 없이 사용하면 의도하지 않은 다른 서버의 자원에 접근할 수 있습니다. #서버사이드 요청 위조(안전X) def call_third_party_api_bad(request): addr = request.GET.g..
크로스사이트 요청 위조(CSRF) 정의 특정 웹사이트에 대해 사용자가 인지하지 못한 상황에서 사용자의 의도와는 무관하게 공격자가 의도한 행위 (수정, 삭제, 등록 등)를 요청하게 하는 공격 웹 응용프로그램이 사용자로부터 받은 요청이 해당 사용자가 의도한 대로 작성되고 전송된 것인지 확인하지 않는 경우 발생 가능 안전한 코딩기법 해당 요청이 정상적인 사용자의 정상적인 절차에 의한 요청인지를 구분하기 위해 세션별로 CSRF 토큰을 생성하여 세션에 저장하고, 사용자가 작업 페이지를 요청할 때마다 hidden 값으로 클라이언트에게 토큰을 전달한 뒤, 해당 클라이언트의 데이터 처리 요청 시 전달되는 CSRF 토큰값을 체크하여 요청의 유효성을 검사 하도록 한다 코드예제 미들웨어 설정 프로젝트 폴더(djangoPro..
LDAP 삽입 정의 입력값을 적절한 처리 없이 LDAP 쿼리문이나 결과의 일부로 사용하는 경우, LDAP 쿼리문이 실행될 때 공격자는 LDAP 쿼리문의 내용을 마음대로 변경할 수 있으며, 이로 인해 프로세스가 명령을 실행한 컴포넌트와 동일한 권한을 가지고 동작하게 된다. 안전한 코딩기법 기본적인 방어법은 유효성 검사이다. 올바른 인코딩 함수를 사용해 모든 변수 이스케이프 처리 화이트리스트 방식의 입력값 유효성 검사 민감한 정보(사용자 패스워드 등)가 포함된 필드 인덱싱 LDAP 바인딩 계정에 할당된 권한 최소화 코드예제 안전하지 않은 코드예제로, 사용자 입력을 그대로 LDAP 질의문에 사용하고 있으며 이 경우 권한 상승 등 공격에 노출될 수 있습니다. #LDAP 삽입(안전X) config = { "bin..
XML 삽입 정의 검증되지 않은 입력값이 XQuery 또는 XPath 쿼리문을 생성하는 문자열로 사용되어 공격자가 쿼리문의 구조를 임의로 변경하고 임의의 쿼리를 실행해 허가되지 않은 데이터를 열람하거나 인증절차를 우회할 수 있는 보안약점 안전한 코딩기법 XQuery 또는 XPath 쿼리에 사용되는 외부 입력 데이터에 대하여 특수문자 및 쿼리 예약어를 필터링 하고 인자화된 쿼리문을 지원하는 XQuery를 사용해야 한다. 코드예제 다음은 안전하지 않은 코드예제로, 파이썬에서 XML 데이터를 처리하기 위한 기본 모듈인 xml.etree.ElementTree를 이용하여 사용자 정보를 가져오는 예제입니다. 이 모듈은 제한적인 Xpath 기능을 제공하며, Xpath 표현식을 인자화해서 사용하는 방법을 제공하지 않습..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.