악성코드 파일 업로드
취약점 설명
게시판 등에서 악성 파일 업로드에 대한 검증이 없을 경우 이를 악용하여 악성스크립트(웹쉘) 파일이 업로드 되어 원격 명령 실행, 권한 획득 등의 공격이 실행될 수 있는 보안 취약점
=> 업로드 파일이 서버에 저장되고 해당 경로를 공격자가 파악할 수 있을 때 공격 가능
=> 업로드 후 공격자는 해당 파일에 접근해서 원하는 행위(원격 명령 실행 등)를 수행
공격 포인트
게시판의 첨부파일
게시판 내부의 이미지 삽입박스
게시판 내부의 동영상 첨부부분
업로드 검증 로직이 존재할 경우 블랙리스트인지 화이트리스트인지 확인
환경분석을 통한 환경에 맞는 웹쉘 사용
해킹시나리오
공격자는 악성코드 파일을 업로드하고 업로드 파일의 절대 경로를 파악합니다. 악성코드 파일의 절대 경로로 접근하여 파일을 실행하게 되면 서버 시스템을 장악할 수 있습니다.
보안대책
- 업로드하는 파일의 타입과 크기를 제한
- 업로드 디렉토리를 웹서버의 document 외부에 설정
- 화이트리스트방식으로 허용된 확장자만 업로드 되도록하고, 확장자도 대소문자 구분없이 처리
- 업로드 되는 파일 경로 및 파일명 필터링 (../ , ; %0 등)
최선: 화이트리스트로 확장자 검증
차선: 블랙리스트로 확장자 검증(권고되는 사항은 아님)
차선: 우회공격을 방지하기 위해 특수문자 필터링
차선: 업로드된 디렉토리나 파일 실행권한을 제거
차차선: 업로드된 경로 노출 방지 (공격 지연)
*블랙리스트는 개발자가 설정한 확장자만 업로드를 할 수 없도록 제한을 해놓은 것 (이 세상에 존재하는 확장자 수는 엄청 많은데, 개발자가 모르는 확장자도 있을 수 있음)
*화이트리스트는 개발자가 의도한 파일만 올라가도록 제한을 해놓은 것