반복된 인증시도 제한 기능 부재 정의 일정 시간 내에 여러 번의 인증 시도 시 계정 잠금 또는 추가 인증 방법 등의 충분한 조치가 수행되지 않는 경우, 공격자는 성공할 법한 계정과 패스워드들을 사전으로 만들고 무차별 대입하여 로그인 성공 및 권한 획득이 가능하다. 안전한 코딩기법 최대 인증시도 횟수를 적절한 횟수로 제한하고 설정된 인증 실패 횟수를 초과할 경우 계정을 잠금하거나 추가적인 인증 과정을 거쳐서 시스템에 접근이 가능하도록 한다. 코드예제 다음은 안전하지 않은 코드예제로, 사용자 로그인 시도에 대한 횟수를 제한하지 않는 코드입니다. 로그인 페이지 {% csrf_token %} 아이디: 패스워드: {{ msg }} #반복된 인증시도 제한 기능 부재(안전X) def get_user_pw(user_i..
무결성 검사없는 코드 다운로드 정의 원격지에 위치한 소스코드 또는 실행 파일을 무결성 검사 없이 다운로드 후 이를 실행하는 프로그램이 존재한다. 이러한 프로그램은 호스트 서버의 변조, DNS 스푸핑(Spoofing), 전송 시의 코드 변조 등의 방법을 이용해 공격자가 악의적인 코드를 실행하는 위협에 취약하게 된다. 파일 무결성을 확인하는 두 가지 주요 방법으로는 암호화 해시 및 디지털 서명이 있다. 안전한 코딩기법 DNS 스푸핑(Spoofing)을 방어할 수 있는 DNS lookup을 수행하고 코드 전송 시 신뢰할 수 있는 암호 기법을 이용해 코드를 암호화 다운로드한 코드는 작업 수행을 위해 필요한 최소한의 권한으로 실행 소스코드는 신뢰할 수 있는 사이트에서만 다운로드해야 하고 파일의 인증서 또는 해시값..
솔트 없이 일방향 해시 함수 사용 정의 중요정보를 솔트(Salt)없이 일방향 해시함수를 사용해 저장한다면, 공격자는 미리 계산된 레인보우 테이블을 이용해 해시값을 알아낼 수 있다. 안전한 코딩기법 패스워드와 같이 중요정보를 저장할 경우, 가변 길이 데이터를 고정된 크기의 해시값으로 변환해 주는 일방향 해시함수를 이용해 저장한다. 솔트값은 사용자별로 유일하게 생성해야 하며, 이를 위해 사용자별 솔트 값을 별도로 저장하는 과정이 필요하다. 코드예제 다음은 안전하지 않은 코드예제로, salt 없이 길이가 짧은 패스워드를 해시함수에 전달해 원문이 공격자에 의해 쉽게 유추되는 코드입니다. #솔트 없이 일방향 해시 함수 사용(안전X) def get_hash_from_pwd_bad(pw): h = hashlib.sh..
주석문 안에 포함된 시스템 주요정보 정의 소프트웨어 개발자가 편의를 위해서 주석문에 패스워드를 적어둔 경우, 소프트웨어가 완성된 후에는 그것을 제거하는 것이 매우 어렵게 된다. 만약 공격자가 소스코드에 접근할 수 있다면 시스템에 손쉽게 침입할 수 있다. 안전한 코딩기법 주석에는 아이디, 패스워드 등 보안과 관련된 내용을 기입하지 않는다. 코드예제 주석문에 중요정보(아이디, 패스워드 등)를 지우지 않는 경우 노출 보안약점이 발생합니다. 프로그램 개발 시 주석문에 포함된 주요정보는 꼭 삭제해야 합니다. #주석문 안에 포함된 시스템 주요정보(안전X) def user_login_bad(id, passwd): # 주석문에 포함된 중요 시스템의 인증 정보 # id = admin # passwd = passw0rd ..
사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 정의 개인정보, 인증 정보 등이 영속적인 쿠키(Persistent Cookie)에 저장된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되며, 이는 시스템을 취약하게 만든다. 안전한 코딩기법 쿠키의 만료시간은 세션 지속 시간을 고려하여 최소한으로 설정하고 영속적인 쿠키에는 중요 정보(사용자 권한 등급, 세션 ID 등)가 포함되지 않도록 한다. 코드예제 다음은 안전하지 않은 코드예제로, 쿠키 만료시간을 과도하게 길게 설정하여 사용자 하드 디스크에 저장된 쿠키가 도용되는 상황을 보여주는 코드입니다. #사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출(안전X) def remind_user_state_bad(request): res = Htt..
부적절한 인증서 유효성 검증 정의 인증서가 유효하지 않거나 악성인 경우, 공격자가 호스트와 클라이언트 사이의 통신 구간을 가로채 신뢰하는 엔티티인 것처럼 속일 수 있다. 이로 인해 대상 호스트가 신뢰 가능한 것으로 믿고 악성 호스트에 연결하거나 신뢰된 호스트로부터 전달받은 것처럼 보이는 스푸핑 된(또는 변조된 데이터)를 아무런 의심 없이 수신하는 상황이 발생할 수 있다. 안전한 코딩기법 데이터 통신에 인증서를 사용하는 경우 송신 측에서 전달한 인증서가 유효한지 검증한 후 데이터를 송수신해야 한다. 코드예제 다음은 안전하지 않은 코드예제로, SSL 기반 소켓 연결 코드입니다. 클라이언트 측에서 통신 대상 서버를 인증하지 않고 접속하는 상황입니다. 이런 경우 서버를 신뢰할 수 없으며 클라이언트 시스템에 영향..
부적절한 전자서명 확인 정의 프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증이 적절하지 않아 공격자의 악의적인 코드가 실행 가능한 보안약점 데이터 전송 또는 다운로드 시 함께 전달되는 전자서명은 원문 데이터의 암호화된 해시 값으로, 수신 측에서 이 서명을 검증해 데이터 변조 여부를 확인할 수 있다. 안전한 코딩기법 주요 데이터 전송 또는 다운로드 시 데이터에 대한 전자서명을 함께 전송하고, 수신측에서는 전달받은 전자 서명을 검증해 파일의 변조 여부를 확인해야 한다 코드예제 다음은 안전하지 않은 코드예제입니다. 송신측이 데이터와 함께 전달한 전자서명을 수신 측에서 별도로 처리하지 않고 그대로 신뢰해 데이터 내부에 포함된 파이썬 코드가 실행되는 취약한 코드입니다. #부적절한 전자서명 확인(안전X)..
취약한 패스워드 허용 정의 사용자에게 강한 패스워드 조합규칙을 요구하지 않으면, 사용자 계정이 취약하게 된다. 안전한 패스워드를 생성하기 위해서는 '패스워드 선택 및 이용 안내서'에서 제시하는 패스워드 설정 규칙을 적용해야 한다. 안내서 다운로드 : https://www.kisa.or.kr/2060305/form?postSeq=14&lang_type=KO KISA 한국인터넷진흥원 1. 안전한 패스워드 2. 이러한 패스워드 사용하지 마세요 3. 안전한 패스워드 생성 Tip 4. 패스워드 보안 지침(이용자 측면) 5. 패스워드 보안 지침(관리자 측면) www.kisa.or.kr 안전한 코딩기법 패스워드 생성 시 강한 조건 검증을 수행한다. 패스워드(패스워드)는 숫자와 영문자, 특수문자 등을 혼합하여 사용하고..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.