Notice
Recent Posts
Recent Comments
Link
IgnatiusHeo
구현단계 보안약점 제거 기준-부적절한 전자서명 확인 본문
작성일: 230704
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(375~378p)
구분 | - 입력데이터 검증 및 표현 |
설계단계 | - 업로드·다운로드 파일 검증 https://cryptocurrencyclub.tistory.com/98 |
개요 | 전자서명이란 서명자의 신원을 확인하고 서명된 파일의 무결성을 보장할 수 있는 디지털 정보이다. 전자서명이 사용된 경우, 전자서명을 검증하지 않거나 검증절차가 부적절하면 위변조된 파일으로 악성코드에 감염될 수 있으므로 전자서명을 확인하여 위변조 여부를 판별하고 사용해야 한다. |
진단 세부사항 (설계단계) |
① 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다. 업로드되는 파일의 타입, 크기, 개수 및 실행권한을 제한하도록 설계하고 있는지 확인한다. ㅇ 업로드 가능한 파일의 타입, 크기, 개수와 저장 시 파일의 퍼미션을 정의하고 있는지 확인(업로드 기능을 지원하는 프레임워크, 라이브러리 사용 여부 확인 후 파일 속성 제한 설정 여부 확인) ㅇ 허용되지 않는 파일 타입, 크기, 개수 업로드의 제한 기능 테스트 계획 수립 여부 확인 ㅇ 업로드 후 서버에 저장된 파일의 실행 제한 여부 점검 테스트 계획 수립 여부 확인 ② 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다. 업로드된 파일을 외부에서 식별되거나 직접 접근할 수 없도록 설계하고 있는지 확인한다. ㅇ 저장 경로와 파일명을 외부에서 알 수 없도록 정의하는지 확인(난수 + 중복 안되도록) ㅇ 원본 파일명과 저장경로/파일명의 매핑정보를 관리하도록 설계되어 있는지 확인 ㅇ 저장된 파일명, 경로가 외부에서 식별 가능한지 점검할 수 있는 테스트 계획 수립 여부 확인 ③ 파일 다운로드 요청 시, 요청파일명에 대한 검증작업을 수행해야 한다. 파일 다운로드 요청 시 파일에 대한 검증작업이 이루어지도록 설계하고 있는지 확인한다. ㅇ 파일 다운로드 요청방식의 안전한 설계 여부 확인(경로 조작 문자 포함 여부, DB정보를 이용하여 요청파일의 유효성 점검 여부) ㅇ 조작된 파일명을 이용한 파일 다운로드 요청의 차단 여부 확인 ④ 다운로드받은 소스코드나 실행파일은 무결성 검사를 실행해야 한다. 다운로드받은 소스코드와 실행파일에 대해 무결성을 검증하도록 설계하고 있는지 확인한다. ㅇ 파일의 무결성 검사를 위한 값(예: 해시)의 제공 여부 확인 ㅇ 무결성 검사 수행 후 파일 다운로드하도록 절차가 설계되어 있는지 확인 ㅇ 변조된 파일에 대한 다운로드 처리가 차단되는지 점검할 수 있는 테스트 계획의 수립 여부 확인 |
보안대책 (구현단계) |
전자서명을 포함하는 파일을 사용할 때는 항상 전자서명을 확인하여야 한다. 이 경우, 전자서명 파일의 출처 등을 확인하여 신뢰할 수 없는 곳에서 생성된 파일을 사용하지 않도록 한다. |
진단방법 (구현단계) |
JarFile을 생성할 때 전자서명 여부를 확인하는 Boolean형 파라미터가 있는 생성자를 사용하여 전자 서명 여부를 검증하는지 확인한다. 또한 JarEntry.getCodeSigners() 메소드로 전자서명 주체 검증여부를 확인한다. |
다. 코드예제
ㅇ 분석
1: File f = new File(downloadedFilePath);
2: JarFile jf = new JarFile(f);
ㅇ 내용
1. 파일 서명을 확인하지 않고 사용함...?
ㅇ 수정
1:File f = new File(downloadedFilePath);
2:JarFile jf = new JarFile(f, true);
3:Enumeration<JarEntry> ens = jf.entries();
4:while (ens.hasMoreElements()) {
5: JarEntry en = ens.nextElement();
6: if (!en.isDirectory()) {
7: if (en.toString().equals(path)) {
8: byte[] data = readAll(jar.getInputStream(en), en.getSize());
9: CoeSigner[] signers = en.getCodeSigners();
10: ...
11: }
12: }
13:}
14:jf.close();
ㅇ 내용
1. JarFile 생성자에 boolean형 파라미터를 사용하여 전자서명을 확인한다. 전자서명 여부를 확인 후, JarEntry.getCodeSigners() 메소드를 사용하여 JAR 객체에 대한 전자서명 주체를 신뢰 할 수 있는지 확인하여야 한다.
쿠키의 만료시간은 해당 기능에 맞춰 최소로 설정하고 영속적인 쿠키에는 중요 정보가 포함되지 않도록 한다.
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
구현단계 보안약점 제거 기준-사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 (0) | 2023.07.06 |
---|---|
구현단계 보안약점 제거 기준-부적절한 인증서 유효성 검증 (0) | 2023.07.04 |
구현단계 보안약점 제거 기준-취약한 비밀번호 허용 (0) | 2023.07.04 |
구현단계 보안약점 제거 기준-적절하지 않은 난수 값 사용 (0) | 2023.07.04 |
구현단계 보안약점 제거 기준-충분하지 않은 키 길이 사용 (0) | 2023.07.04 |