웹 취약점 및 시큐어코딩 점검기준
1) OWASP(Open web application security project)
- 전 세계 기업, 교육기관 및 개인이 만들어가는 오픈 소스 어플리케이션 보안 프로젝트, OWASP TOP10은 웹에서 발생할 수 있는 대표적인 취약점 10가지가 정리되어 있으며 3년마다 갱신된다.
2) WASC(Web application security consortium)
- 웹 어플리케이션 보안 컨소시움은 산업전문가, 조직의 대표자 등의 전문가들로 구성되어 있으며, 기술 정보, 논문, 보안 가이드라인, 그 밖 유용한 문서 등을 지속적 릴리즈한다.
3) CVE(Common vulnerabilities and exposures)
- 국가기관 및 벤더사 등이 함께 발생된 취약점을 번호화시켜 취약점을 관리하는 데이터베이스이다.
해당 넘버는 CVE - 연도 - 순서 규칙으로 만들어진다.
4) CWE(Common weakness enumeration)
- mitre라는 기관에서 다양한 개발언어에 대한 740여 가지의 소스코드 취약점을 정의한 데이터베이스이다.
CWE/SANS TOP 25라는 취약점도 제시하였는데, 이는 개발자가 가장 많이 실수하는 25가지 취약점을 의미한다.
- 항목
입력 데이터 검증 및 표현 | 보안 기능 | 시간 및 상태 | 에러 처리 | 코드 오류 | 캡슐화 | API 오용 |
CWE/SANS Top 25
1. SQL Injection(CWE-89)
악의적인 외부 입력값에 의한 데이터베이스 쿼리구조가 변조되어 데이터조회, 변조 및 삭제 등을 의미
2. Command Injection(CWE-78)
외부의 입력값 형태로 운영체제 명령어 등의 삽입 및 실행 취약점을 의미
3. Classic Buffer Overflow(CWE-120)
버퍼는 데이터가 저장되는 공간이나 정의된 크기보다 큰 데이터를 저장하는 경우 오버플로우가 발생되며, 이를 통해 명령어 실행 등의 취약점을 발생시킴
4. Cross-site Scripting(CWE-79)
외부 입력값에 삽입되는 스크립트에 대한 필터링 혹은 변환과정 없이 그대로 스크립트를 출력에 사용하는 경우, 임의 악의적인 자바스크립트 실행이 가능하다. 이를 통해 로그인 사용자가 가지고 있는 쿠키값 탈취 등에 사용
5. Missing Authentication for Critical Function(CWE-306)
특정권한 및 명령실행 시, 특정 사용자가 권한을 가지고 있는지를 확인해야하는 절차가 누락됨을 의미, 은행계좌 바로 생성 등 문제가 생김
6. Missing Authorization(CWE-862)
적절한 인증 등이 수행되지 않는 기능을 사용자가 악용하는 경우를 의미, 본인의 이름뿐 아니라 타인의 이름입력 시 검증없이 사용자정보를 노출시킬 수 있는 권한검사에 대한 취약점 제공
7. Use of Hard-coded Credentials(CWE-798)
소스코드 내에 중요정보가 하드코딩 된 취약점을 의미
8. Missing Encryption of Sensitive Data(CWE-311)
중요정보를 암호화없이 저장하거나 전송함을 의미, 쿠키값 변조 등의 추가적인 취약점이 발생
9. Unrestricted uplod of file with dangerous type(CWE-434)
실행 가능한 파일을 업로드하고 실행하여 웹 서버를 장악하는 행위를 의미, 업로드 파일을 저장하나 확장자 검사를 하지 않기 때문에 임의의 실행파일을 업로드할 수 있는 취약점
10. Reliance on untrusted inputs in a security decision(CWE-807)
외부의 의심스런 입력 값을 권한할당 등에 사용함을 의미
11. Execution with Unnessary privileges(CWE-250)
필요 권한 이상의 권한을 할당받은 소프트웨서의 경우 만약 취약점이 존재시 문제를 심각한 문제점 초래
12. Cross-Site Request Forgery(CSRF)(CWE-352)
악의적 스크립트를 통해 일반사용자가 공격자를 대신해 특정행동을 수행하는 기법 의미
13. Improper Limitation of a Pathname to a Restricted Directory(CWE-22)
외부 입력값(../../../../)을 통해 시스템에 접근하기 위한 경로를 삽입하여 내부 시스템 정보에 접근하는 행위 의미
14. Download of Code Without Integrity Check(CWE-494)
외부 사이트에서 사용되는 스크립트 및 파일 등은 원래 사이트에서 가져오는지와 원본코드가 변조되지 않았는지를 검증해야 함, 만약 가짜 스크립트와 가짜 개인정보 업데이트를 제공하는 겨웅 개인정보를 유출시킬 수 있는 피싱사이트 구성도 가능
15. Incorrect Authorization(CWE-863)
잘못된 권한으로 인한 정보유출 등의 취약점을 의미
16. Inclusion of Functionality from Untrusted Control Sphere(CWE-829)
외부 사이트에서 가져온 기능을 검증없이 사용하는 경우 악의적인 외부 사이트의 스크립트를 사용자에게 실행시킬 수 있는 취약점을 의미
17. Incorrect Permission Assignment for Critical Resource(CWE-732)
특정 리소스에 대한 권한을 기본권한 등으로 할당하는 경우 임의의 사용자가 파일읽기, 수정 및 삭제의 문제점을 가질 수 있다. 즉 누구든 읽고 편집하고 삭제할 수 있는 취약점
18. Use of Potentially Dangerous Function(CWE-676)
개발언어에서 사용되는 취약한 함수들을 의미하는 것
19. Use of Broken or Risky Cryptograhic Algorithm(CWE-327)
취약한 암호화 알고리즘을 사용하는 경우, 중요정보 노출의 위험성을 의미
20. Incorrect Calculation of Buffer Size(CWE-327)
소프트웨어가 할당된 버퍼를 사용할 때, 사용될 사이즈를 정확히 계산하지 않고 사용하는 경우 버퍼오버플로우가 발생됨을 의미
21. Improper Restriction of Excessive Authentication Attemps(CWE-307)
계속적인 인증 공격 시도에 대한 차단 기능을 제공하지 않는 경우를 의미
22. URL Redirection to Untrusted Site(CWE-601)
페이지에서 제공되는 다른 도메인으로의 분기기능은 피싱사이트로의 유도를 할 수 있기 때문에 사용상 주의
23. Uncontrolled Format String(CWE-134)
%x, %p, %n과 같은 포맷 스트링이 일반적으로 사용됨, 메모리 구조를 파악하는데 악용될 수 있고, %n이나 %hn를 이용하면 특정 메모리 위치의 값을 다른 것으로 변경 가능한 취약점, 프로그램의 흐름을 변경할 수 있는 취약점 발생
24. Integer Overflow or Wraparound(CWE-190)
랜덤한 수를 생성하고 +1을 하고 있으며, 랜덤한 수가 byte타입의 경계값이 되고, 여기에 +1을 한다면 오버플로우와 같은 문제가 발생될 수 있음
25. Use of a One-Way Hash without a Salt(CWE-759)
Salt값을 사용하지 않고 해쉬 알고리즘을 사용하는 경우, 사전에 알려진 단어들에 대한 해쉬값을 미리 만들어 두고 크랙을 원하는 해쉬값과 비교하여 원문을 취득하는 Rainbow attack에 취약할 수 있음