1. CWE 항목
- 식별 정보
- 기술 정보
- 범위와 한계 정보
- 처방 정보
- 개선 정보
2. CVSS
컴퓨터 시스템 보안 취약성의 심각성을 평가하기 위한 산업체 표준
- 취약점 수정을 위한 우선순위 제공
- 시스템에서 발견된 취약성의 심각성 평가(기준 제공)
3. Software Security Problem
방어 프로그래밍은 충분하지 않다
Security Features != Secure Features
전역, 정해지지 않은 값을 입력
Software Quality and Soft Security
4. Testing Specified vs Unspecified Features
- Testring
- 단위 모듈, 개인, 통합.. 테스팅은 한계가 존재한다
- 기능적 결함, 의도한 대로 동작, 일정 수준 만족
- 정해진 값을 입력
- 퍼징
- 랜덤값을 넣어 테스팅
- 실행 플로우 반영, 조금씩 수정하며 가이드 형태의 랜덤화(스마트 퍼징)
75퍼센트의 해커가 발생하는 곳은 Application 섹션이다
5. 이전과 마찬가지로, 예측할 수 있는 Weakness 단계에서 미리 막아내자
6. 소프트웨어 취약성
소프트웨어 결함, 버그, 허점 등은 일반적으로 악용(exploit)되는 소프트웨어 취약성의 주요한 원인이 되고 있음
불완전한 코딩 방식을 밝히고, 안전한 코딩 방식을 개발자에게 교육 시킴으로써 소프트웨어가 배포되기 전에 취약성을 제거하거나 줄일 수 있다.
배포 된 후에 기능적 결함등의 문제가 발생하면 손해가 더 크므로..
7. 시큐어 코딩 원칙 및 관습
- 시큐어 코딩 표준 지침을 따르자
- 앞과 뒤 추적할 수 있는 코드를 만들어라
- 재사용성과 유지보수성을 위한 코드
- 메모리 그리고 다른 자원을 신중하게 할당하라
8. 취약한 코드의 예.. Authorization Bypass
예를들어, 아래의 코드가 있다고 해보자
boolean authenticated = false;
String query = "SELECT Username FROM Users WHERE Username = `" +
strUsername + "` AND Password = `" + strPassword + "`";
if( getQueryResult (query) == "")
authenticated = false;
else authenticated = true;
위에서 username과 password를 체크하는 부분을 유심히 살펴보길 바란다.
1. password를 평문 그대로 저장
2. 존재하는지 판단 유무를 ""로 판단
따라서, 아래의 예시로 empty string을 넣어 로그인이 가능할 것 이다.
Login : ` OR ''='
Password : ` OR ''="
만약 로그인을 한다면.. 아래의 SQL문이 실행되어
SELECT Username FROM Users
WHERE Username = '' OR ''='' AND Password = '' OR ''=''
공격자는 DB 테이블의 합법적인 첫 번째 사용자인 것처럼 검증될 것이다.
9. 취약점을 개선해보자
Boolean authenticated = false;
String query = "SELECT Username FROM Users WHERE Username = '" +
addslash(strUsername) + "' AND Password = '" +
addslash(strPassword) + "';
// 입력값을 그대로 사용하지 않고 addslash함수로 검사를 수행
if (getQueryResult(query) == "")
authenticated = false;
else authenticated = true;
동일하게 아래의 Attack을 시도한다고 가정해보자
Login : ` OR ''='
Password : ` OR ''="
SQL문을 실행하면..
SELECT Username FROM Users
WHERE Username = ’\’ OR \’\’=\’’ AND Password = ’\’ OR \’\’=\’’
user를 찾을 수 없습니다라는 메시지가 출력 될 것이다.
'시큐어코딩' 카테고리의 다른 글
시큐어코딩 (6) - CH 02-2 일반적인 오류 코드로 살펴보기 (0) | 2025.04.13 |
---|---|
시큐어코딩 (5) - CH 02-1 String Vulnerabilities(문자열 취약점) (0) | 2025.04.13 |
시큐어코딩 (4) - CH 01-3 (0) | 2025.04.13 |
시큐어 코딩 (2) - CH 01-1 (0) | 2025.04.13 |
시큐어 코딩 (1) - CH 00 (0) | 2025.04.13 |