■ 코드오류 타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다. 부적절한 자원 해제 ■ 개요 프로그램의 자원, 예를 들면 열린 파일디스크립터(Open File Descriptor), 힙 메모리(Heap Memory), 소켓(Socket) 등은 유한한 자원이다. 이러한 자원을 할당 받아 사용한 후, 더 이상 사용하지 않는 경우 에는 적절히 반환하여야 하는데, 프로그램 오류 또는 에러로 사용이 끝난 자원을 반환하지 못하는 경우이다. ■ 안전한 코딩 기법 자원을 획득하여 사용한 다음에는 반드시 자원을 해제하여 반환한다. 코드예제 try구문 내 처리 중 오류가 발생할 경우, close() 메소드가 실행되지 않아 사용한 자원이 반환되..
■ 보안기능 보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다. 적절하지 않은 난수 값 사용 ■ 개요 예측 가능한 난수를 사용하는 것은 시스템에 보안약점을 유발한다. 예측 불가능한 숫자가 필요한 상황에서 예측 가능한 난수를 사용한다면, 공격자는 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격하는 것이 가능하다. ■ 안전한 코딩 기법 난수 발생기에서 시드(Seed)를 사용하는 경우에는 고정된 값을 사용하지 않고 예측하기 어려운 방법으로 생성된 값을 사용한다. python에서 random 모듈은 주로 보안목적이 아닌 게임, 퀴즈 및 시뮬레이션을 위해 설계되었다. 세션 ID, 암호..
■ 시간 및 상태 동시 또는 거의 동시 수행을 지원하는 병렬 시스템이나 하나 이상의 프로세스가 동작되는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안약점이다. 경쟁조건: 검사시점과 사용시점(TOCTOU) ■ 개요 병렬시스템(멀티프로세스로 구현한 응용프로그램)에서는 자원(파일, 소켓 등)을 사용하기에 앞서 자원의 상태를 검사한다. 하지만, 자원을 사용하는 시점과 검사하는 시점이 다르기 때문에, 검사하는 시점(Time Of Check)에 존재하던 자원이 사용하던 시점(Time Of Use)에 사라지는 등 자원의 상태가 변하는 경우가 발생한다.예를 들어, 프로세스 A와 B가 존재하는 병렬시스템 환경에서 프로세스 A는 자원사용(파일 읽기)에 앞서 해당 자원(파일)의 존재 여부를 검사(TOC)..
■ 보안기능 보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다. 충분하지 않은 키 길이 사용 ■ 개요 길이가 짧은 키를 사용하는 것은 암호화 알고리즘을 취약하게 만들 수 있다. 키는 암호화 및 복호화에 사용되는데, 검증된 암호화 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 안에 키를 찾아낼 수 있고 이를 이용해 공격자가 암호화된 데이터나 패스워드를 복호화 할 수 있게 된다.암호 알고리즘 및 키 길이 선택 시, 암호 알고리즘의 안전성 유지기간과 보안강도별 암호 알고리즘 키 길이 비교표를 기반으로 암호 알고리즘 및 키 길이를 선택하여야 한다. ■ 안전한 코딩 기법 ..
■ 코드오류 타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다. Null Pointer 역참조 ■ 개요 널 포인터(Null Pointer) 역참조는 '일반적으로 그 객체가 널(Null)이 될 수 없다'라고 하는 가정을 위반했을 때 발생한다.공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우, 그 결과 발생하는 예외 상황을 이용하여 추후의 공격을 계획하는 데 사용될 수 있다.Python에서는 Null pointer dereference가 발생하지 않는다. Python에서는 Null 객체가 사용되지 않으며 대신 None 키워드를 사용하여 null 개체와 변수를 정의 한다. None은 다른 언어의 null과 동일한 기능을 수행하지..
■ 보안기능 보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다. 암호화되지 않은 중요정보(시큐어코딩 가이드) ■ 개요 많은 응용프로그램은 메모리나 디스크에서 중요한 정보(개인정보, 인증정보, 금융정보 등)를 처리한다. 이러한 중요정보가 제대로 보호되지 않을 경우, 보안이나 데이터의 무결성을 잃을 수 있다. 특히 사용자 또는 시스템의 중요정보가 포함된 데이터를 평문으로 송·수신 또는 저장할 때 인가되지 않은 사용자에게 민감한 정보가 노출될 수 있다. ■ 안전한 코딩 기법 개인정보(주민등록번호, 여권번호 등), 금융정보(카드번호, 계좌번호 등), 패스워드 등 중요정보를 저장하거나 통신..
시큐어코딩 관련 용어 정리 ● Developer Economics State of the Developer Nation, 20th Edition developernation.net에서 매년 165개국 30,000명 이상의 개발자들을 대상으로 설문조사를 하여 제공하고 있다. 웹, 모바일, 데스크톱, 클라우드, 산업용 IoT, 소비자 전자 제품, 임베디디소프트웨어, AR 및 VR등 다양한 분야의 설문을 실시하고 있다.● Developer AES(Advanced Encryption Standard) 미국 정부 표준으로 지정된 블록 암호 형식으로 이전의 DES를 대체하며, 미국 표준 기술 연구소 (NIST)가 5년의 표준화 과정을 거쳐 2001년 11월 26일에 연방 정보처리표준(FIPS 197)으로 발표하였다..
■ 에러처리 에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요정보(시스템 내부정보 등)가 포함될 때, 발생할 수 있는 취약점으로 에러를 부적절하게 처리하여 발생하는 보안약점이다. 부적절한 예외 처리 ■ 개요 프로그램 수행 중에 함수의 결과 값에 대한 적절한 처리 또는 예외 상황에 대한 조건을 적절하게 검사 하지 않을 경우, 예기치 않은 문제를 야기할 수 있다. ■ 안전한 코딩 기법 값을 반환하는 모든 함수의 결과값을 검사하여, 그 값이 의도했던 값인지 검사하고, 예외 처리를 사용 하는 경우에 광범위한 예외 처리 대신 구체적인 예외 처리를 수행한다. 코드예제 다음 예제는 다양한 예외가 발생할 수 있음에도 불구하고 광범위한 예외 처리로 예외상황에 따른 적절한 조치를 처리 할 수 없다. 안전..
현대 IT 환경에서 데이터베이스 보안은 필수입니다. SQL Injection과 NoSQL Injection은 데이터베이스를 겨냥한 대표적인 공격 기법으로, 입력 값 검증 부족으로 발생합니다. 이 글에서는 두 공격 방식의 차이점과 주요 특징을 살펴보고, 이를 방어하기 위한 효과적인 보안 방법을 소개합니다. SQL과 NoSQL 환경을 제대로 이해해봅시다. 데이터를 유연하게 다루는 비관계형 데이터베이스(NoSQL)의 이해 NoSQL은 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)와 달리, 고정된 스키마 없이 데이터 저장과 관리를 수행하는 비관계형 데이터베이스입니다. 다음은 NoSQL의 주요 특징과 장점을 설명합니다.1. NoSQL의 정의NoSQL은 "Not Only SQL"의 약자로, SQL ..
U-48 패스워드 최소 사용기간 설정 ■ 점검영역 : 계정 관리 ■ 항목 중요도 : 중 ■ 점검내용 시스템 정책에 패스워드 최소 사용기간 설정이 적용되어 있는지 점검 ■ 점검목적 사용자가 자주 패스워드를 변경할 수 없도록 하고 관련 설정(최근 암호 기억)과 함께 시스템에 적용하여 패스워드 변경 전에 사용했던 패스워드를 재사용 할 수 없도록 방지하는지 확인하기 위함 ■ 보안위협 ※ 최소 사용기간이 설정되어 있지 않아 반복적으로 즉시 변경이 가능한 경우 이전 패스워드 기억 횟수를 설정하여도 반복적으로 즉시 변경하여 이전 패스워드로 설정이 가능함 ■ 참고 ※ 최근 암호 기억사용자가 현재 암호 또는 최근에 사용했던 암호와 동일한 새 암호를 만드는 것을 방지하는 설정. 예를 들어 값 1은 마지막 암호만 기억한다는..
U-47 패스워드 최대 사용기간 설정 ■ 점검영역 : 계정 관리 ■ 항목 중요도 : 중 ■ 점검내용 시스템 정책에 패스워드 최대(90일 이하) 사용기간 설정이 적용되어 있는지 점검 ■ 점검목적 패스워드 최대 사용 기간 설정이 적용되어 있는지 점검하여 시스템 정책에서 사용자 계정의 장기간 패스워드 사용을 방지하고 있는지 확인하기 위함 ■ 보안위협 패스워드 최대 사용기간을 설정하지 않은 경우 비인가자의 각종 공격(무작위 대입 공격, 사전 대입 공격 등)을 시도할 수 있는 기간 제한이 없으므로 공격자 입장에서는 장기적인 공격을 시행할 수 있어 시행한 기간에 비례하여 사용자 패스워드가 유출될 수 있는 확률이 증가함 점검대상 및 판단기준 ■ 대상 : SOLARIS, LINUX, AIX, HP-UX 등 양호패스워..
U-45 root 계정 su 제한 ■ 점검영역 : 계정 관리 ■ 항목 중요도 : 하 ■ 점검내용 su 명령어 사용을 허용하는 사용자를 지정한 그룹이 설정되어 있는지 점검 ■ 점검목적 su 관련 그룹만 su 명령어 사용 권한이 부여되어 있는지 점검하여 su 그룹에 포함되지 않은 일반 사용자의 su 명령 사용을 원천적으로 차단하는지 확인하기 위함 ■ 보안위협 무분별한 사용자 변경으로 타 사용자 소유의 파일을 변경 할 수 있으며 root 계정으로 변경하는 경우 관리자 권한을 획득 할 수 있음 점검대상 및 판단기준 ■ 대상 : SOLARIS, LINUX, AIX, HP-UX 등 양호su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한되어 있는 경우 ※ 일반사용자 계정 없이 root 계정만 사용하는 경우 s..
U-42 최신 보안패치 및 벤더 권고사항 적용 ■ 점검영역 : 패치 관리 ■ 항목 중요도 : 상 ■ 점검내용 시스템에서 최신 패치가 적용되어 있는지 점검 ■ 점검목적 주기적인 패치 적용을 통하여 보안성 및 시스템 안정성을 확보함 ■ 보안위협 최신 보안패치가 적용되지 않을 경우, 이미 알려진 취약점을 통하여 공격자에 의해 시스템 침해사고 발생 가능성이 존재함 점검대상 및 판단기준 ■ 대상 : SOLARIS, LINUX, AIX, HP-UX 등 양호패치 적용 정책을 수립하여 주기적으로 패치관리를 하고 있으며, 패치 관련 내용을 확인하고 적용했을 경우 취약패치 적용 정책을 수립하지 않고 주기적으로 패치관리를 하지 않거나 패치 관련 내용을 확인하지 않고 적용하지 않았을 경우 ■ 조치방법 O/S 관리자, 서비스..
U-49 불필요한 계정 제거 ■ 점검영역 : 계정 관리 ■ 항목 중요도 : 하 ■ 점검내용 시스템 계정 중 불필요한 계정(퇴직, 전직, 휴직 등의 이유로 사용하지 않는 계정 및 장기적으로 사용하지 않는 계정 등)이 존재하는지 점검 ■ 점검목적 불필요한 계정이 존재하는지 점검하여 관리되지 않은 계정에 의한 침입에 대비하는지 확인하기 위함 ■ 보안위협 로그인이 가능하고 현재 사용하지 않는 불필요한 계정은 사용중인 계정보다 상대적으로 관리가 취약하여 공격자의 목표가 되어 계정이 탈취될 수 있음 ※ 퇴직, 전직, 휴직 등의 사유발생시 즉시 권한을 회수 ■ 참고 ※ Default 계정: OS나 Package 설치 시 기본적으로 생성되는 계정(예 lp, uucp, nuucp 등) ※ 불필요한 default 계정 삭..