Notice
Recent Posts
Recent Comments
Link
IgnatiusHeo
구현단계 보안약점 제거 기준-서버사이드 요청 위조 본문
작성일: 230704
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(276~283p)
구분 | - 입력데이터 검증 및 표현 |
설계단계 | - 시스템 자원 접근 및 명령어 수행 입력값 검증 https://cryptocurrencyclub.tistory.com/92 |
개요 | 적절한 검증절차를 거치지 않은 사용자 입력 값을 서버간의 요청에 사용하여 악의적인 행위가 발생할 수 있는 보안약점이다. 외부에 노출된 웹 서버에 취약한 애플리케이션이 존재하는 경우 공격자는 URL 또는 요청문을 위조하여 접근통제를 우회하는 방식으로 비정상적인 동작을 유도하거나 신뢰된 네트워크에 있는 데이터를 획득할 수 있다. |
진단 세부사항 (설계단계) |
① 외부 입력값을 이용하여 시스템자원을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 해야 한다. ㅇ 접근 허가된 시스템자원이 식별되고, 사용가능한 기능과 매핑되어 있는지 확인 ㅇ 시스템자원 접근 이력이 로그로 기록되도록 설계되어 있는지 확인 ㅇ 조작된 입력으로 비허가 자원의 접근가능 여부를 점검할 수 있는 테스트 계획의 수립 여부 확인 → 경로조작에 사용 가능한 문자: / \\ ② 서버프로그램 안에서 셸을 생성하여 명령어를 실행해야 하는 경우 외부입력값에 의해 악의적인 명령어가 실행되지 않도록 해야 한다. ㅇ 명령어 실행 기능 포함여부를 식별, 해당 기능의 실행 가능 명령어 파라미터의 제한 설계 여부 확인 ㅇ 운영체제 명령어 실행 이력이 로그로 기록되도록 설계되어 있는지 확인 → 누가/언제/어느IP에서 썼는지 확인 가능하도록 설계되어야함. ㅇ 조작된 입력으로 비허가 명령어의 실행 가능 여부 테스트 계획 수립 여부 확인 → 검증해야 할 특수문자: | & ; |
보안대책 (구현단계) |
식별할 수 있는 범위 내에서 사용자의 입력 값을 다른 시스템의 서비스 호출에 사용하는 경우, 사용자의 입력 값을 화이트리스트 방식으로 필터링한다. 사용자가 지정하는 무작위의 URL을 받아들여야 한다면 내부의 URL을 블랙리스트로 지정하여 필터링한다. 또한 동일한 내부 네트워크에 있더라도 기기 인증, 접근권한을 확인하여 요청이 이루어질 수 있도록 한다. |
진단방법 (구현단계) |
① 다른 시스템의 서비스를 호출하는 함수가 존재하는지 확인하고 ② 다른 시스템을 호출할 때 사용되는 입력 값이 신뢰할 수 있는 값인지 확인한다. 만약 입력 값이 신뢰할 수 없고 별도의 검증절차가 없으면 안전하지 않다고 판정한다. |
다. 코드예제
ㅇ 분석
1:protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
IOException {
2: // 사용자 입력값(url)을 검증없이 사용하여 안전하지 않다.
3: URL url = new URL(req.getParameter("url"));
4: HttpURLConnection conn = (HttpURLConnection) url.openConnection();
5:}
ㅇ 내용
1. url 파라미터 수신 후, 검증 없이 사용함.
ㅇ 수정
1:public class Connect {
2: // key, value 형식으로 URL의 리스트를 작성한다.
3: private Map<String, URL> urlMap;
4: protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
IOException {
5: // 사용자에게 urlMap의 key를 입력받아 urlMap에서 URL값을 참조한다.
6: URL url = urlMap.get(req.getParameter("url"));
7: // urlMap에서 참조한 값으로 Connection을 만들어 접속한다.
8: HttpURLConnection conn = (HttpURLConnection) url.openConnection();
9: }
10: }
ㅇ 내용
1. 키-밸류 매핑테이블을 만들어서 사용자가 키값을 보내면 밸류값에 저장된 URL값을 실행하는 걸로 보임
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
구현단계 보안약점 제거 기준-정수형 오버플로우 (0) | 2023.07.04 |
---|---|
구현단계 보안약점 제거 기준-HTTP 응답분할 (0) | 2023.07.04 |
구현단계 보안약점 제거 기준-크로스사이트 요청 위조 (0) | 2023.07.04 |
구현단계 보안약점 제거 기준-LDAP 삽입 (0) | 2023.07.04 |
구현단계 보안약점 제거 기준-XML 삽입 (0) | 2023.07.04 |