━━━━ ◇ ━━━━
정보보안실무/해킹보안실무평가

평가 12. SW개발 보안 구축 평가

728x90
반응형

[평가 1.1] 소프트웨어 개발 생명주기 모델 중 폭포수 모델에 대해 서술하시오.

폭포수 모델은 가장 오래된 모델이며 소프트웨어 개발 시, 각 단계를 확실하게 마무리 지은 후에 다음 단계로 넘어가는 모델이다. 또한 선형 순차적 모형으로 고전적 생명주기 모형이라고도 부른다. 타당성 검토 계획 요구사항 분석 설계 구현 테스트 유지보수의 절차를 따르며 각 단계별 정의와 산출물이 명확하다는 장점이 있다. 구체화된 절차에 기반을 두는 만큼 소형의 프로젝트 보다는 규모가 크고 복잡하거나 장기간 계속되는 프로젝트에 사용된다. 하지만 복잡하고 장기간 프로젝트에 맞는 성격을 띄우기 때문에 요구사항 변경이 용이하지 않다는 단점도 있다.


[평가 1.2 ~ 1.4] 소프트웨어 개발 보안 환경을 테스트가 가능하도록 설계하여 구축하고 정상적으로 동작이 되도록 설정하시오.

DVWA

 

KALI DVWA

 

Setup DB


[평가 2.1] 실습 도구에서 PHP 코드의 취약점을 통해 공격을 실행하고 대응 방안에 대해 실습을 진행하시오. (Command Injection)

SECURITY LEVEL → MEDIUM

&& uname 입력 시 아무변화 없음

 

View Source 블랙리스트 문자열 확인

 
 

인젝션 취약점 점검 “cat /etc/passwd”를 입력해도 아무 변화가 없기 때문에 &&를 양 옆으로 찢어서 입력 후 사용자 정보 확인

대응방안

현재 ‘&&’, ‘;’만 블랙리스트 등록이 되어 있기 때문에 기호들을 조금 더 다양화 및 세분화 시켜 ‘&’, ‘$’, ‘(’ 등을 추가하여 보안레벨을 상향한다.

 

 

[평가 2.2] 실습 도구에서 PHP / MySQL의 취약점을 통해 공격을 실행하고 대응 방안에 대해 실습을 진행하시오. (SQL Injection 사용자 계정 정보 획득)

SECURITY LEVEL MEDIUM

Mediumsql 구문을 넣을 수 없는 구조임을 확인할 수 있음.

 

View source를 확인해보면 ‘mysql_real_escape_string’이라는 함수때문에 적혀 있으므로 5’ 또는 1 = 1#51 = 1으로 수정해서 sql구문이 이루어지지 않는 구조로 되어있는 것을 확인할 수 있음

 

ZAP 실행 후 브레이크를 걸고 데이터값을 직접 조작

 

다음 단계로 넘어가면 1의 모든 계정정보가 출력된 것을 확인 할 수 있음

대응방안

SQL코드 사례분석을 참고한 소스 차원 대책으로서 웹사이트 로그인 및 사용자 입력값 사용 코드를 대상으로 DB Query 생성방식을 점검한다. 또한 소스코드에서 사용자 입력값에 대한 정당성 체크루틴을 도입한다. 입력받은 변수와 DB 필드의 데이터형을 일치 시켜야 하고, 사용 중인 SQL 구문을 변경시킬 수 있는특수문자가 포함되어 있는지 체크한다.

 
 

[평가 2.3] OWASP ZAP 도구를 활용하여 취약점을 스캐닝하고 발견된 취약점 중 하나를 선택하여 테스트 진행과 결함을 해결하기 위한 방안에 대해 서술하시오.

SECURITY LEVEL LOW

먼저 1을 넣어본다.

취약점 확인을 위해 1’을 입력해보면 아래와 같은 오류구문이 출력된다. sql 인젝션을 시도할 수 있다는 의미이다.

아래와 같이 입력해보니 계정 정보가 모두 출력되는 것을 확인할 수 있었다.

 

이 외에도 select문 컬럼 수 확인, DB 목록 확인, DB의 테이블 목록 확인, 테이블 컬럼 목록 확인, dvwa.users 테이블의 user, password 열람 등을 할 수 있다.

 
 

zap에서 active scan 후 경고를 확인해보면 아래와 같다.

id 변수에서 "Cross-site Scripting (Reflected)"(반사형 XSS) 취약점과 "SQL Injection - MySQL"(MySQL SQL 구문삽입) 취약점이 탐지되었다.

 

대응방안

경고메시지에 출력된 해결 내용처럼 허가된 client라해도 client측의 입력값을 오로지 신뢰하면 안된다는 것이 중요하다. 따라서 whitelist/blacklist validation을 통해 거부 문자열(기호)를 지정해야한다. 문자열 blacklist를 지정하는 동안 사용자 입력 시 특수문자(', ;, ", \, Space, --, +) 포함 여부를 체크한다. 허용되지 않은 문자열, 문자 포함 시에는 에러 처리를 하고, 수정 중에는 에러가 반환되도록 허용하되 개발 종료 후 그 기능을 제거해야한다.

예를들어 에러를 표시하는 것 보다는 메인 페이지로 반환하는게 보안성을 더 높일 수 있을 듯 하다.

 

 
728x90
반응형
COMMENT