카테고리 없음

전자정부프레임워크 SQL Injection 취약점 추가하기

nopdata 2021. 11. 15. 23:59

전자정부 프레임워크로 개발된 시스템에 특정한 목적을 위해 강제로 취약점을 부여해야하는 프로젝트가 있었다.
당시 시스템을 개발하던 개발자에게 SQL Injection 취약점을 부여해 달라고 요청 하였으나, 전자정부 프레임워크로 개발되었기 때문에 해당 취약점은 넣을 수 없다는 답변이 돌아왔다.

정말 프레임워크로 개발되었기 때문에 취약점 부여가 불가능한가? 당시 잠깐 찾아보고 테스트를 한 결과 아니었다. 전자정부 프레임워크 자체가 어렵게 구성되어있는 프레임워크도 아니기 때문에 쉽게 변경 가능하다.

 

1. 전자정부 프레임워크란?

솔직히 잘 모르겠다. 스프링 베이스의 프레임워크이며 국내 기업들의 개발 표준을 제시한 것 같다.
https://egovframe.go.kr/home/compatsw/compatswList.do?param.cateCd=08 

 

호환성확인SW 목록 | 표준프레임워크 포털 eGovFrame

처리중입니다. 잠시만 기다려주십시오.

egovframe.go.kr

개발 표준이며 상호 호환이 된다고 하면 A프레임워크만 아는 사람이 B프레임워크로 개발하는 프로젝트를 그냥 할 수 있는건가?

 

2. 테스트 환경

  • eGovFrmaeDev-3.9.0-64bit (Release. 2020.03.05)
  • mybatis 3.2.8
  • mybatis-spring 1.2.2
  • Apache Tomcat v8.5
  • Windows 10 64bit

 

3. SQL Injection 취약점 부여

사실 전자정부 프레임워크 자체가 스프링 베이스이기 때문에 스프링에서 SQL Injection을 발생 시키는 것과 동일하다.
소스코드는 전자정부 프레임워크 페이징 샘플 코드를 사용했다.

3.1 취약점을 추가할 웹 페이지 확인 (retrieveEmployeeList.do)

취약점이 부여될 사원조회 목록 페이지 (retrieveEmployeeList.do)

 

3.2 사원번호 조회 부분 코드 확인 (retrieveEmpList)

사원조회 검색 페이지 처리 부분 (/web/EmpController.java)
사원조회 요청 처리를 위한 데이터처리 요청 (EmpServiceImpl.java)
DB에서 사원목록 조회 (EmpMapper.java)
사원조회 쿼리 구성(employee.xml)

 

3.4 취약한 맵핑 정보로 수정

수정 전 맵핑 정보
수정 후 맵핑 정보

수정 전 … ‘%’ || #{searchKeyword} || ‘%’
수정 후 … ‘%’ || ‘${searchKeyword}’ || ‘%’

 

3.5 테스트 결과 확인

수정 전 - SQL Injection 발생 안함

 

수정 후 - SQL Injection 발생(참)
SQL Injection 발생 (거짓)

refer
- 전자정부 샘플 코드: link
- Spring에서 $ # 차이: link