wonder
정보보안 스터디 - 11주차 4일 - 파일 업로드/다운로드 대응 방안 본문
☞ 파일업로드 대응 방안
DB서버를 구축하여 파일업로드를 시킵니다.
파일 업로드 취약점은 파일 확장자를 서버측에서 화이트 리스트 기반으로 잘 막아내기 때문에 크게 문제 없어보입니다.
그래도 안전하게 서버에 영향을 끼치지 않으려면 DB서버에 파일을 업로드 시킵니다.
대용량 바이너리파일을 넣을 수 있는 BLOB형식으로 DB에 저장시킵니다.
☞ 파일 인클루전 대응 방안
인클루전 취약점이 있을 경우에는 파일업로드 취약점을 잘 막아도 파일 업로드 없이 웹쉘을 실행시킬 수 있기 때문에 잘 막아줘야합니다.
인클루전 취약점은
?lang= 변수값을 그대로 받지 않습니다.
원래는 변수값 ko.php 으로 설정을하고
include로 요청한 php파일을 그대로 받아왔다면
변수값을 ko로만 지정하고, 조건이 있을 경우에만 그에 대응하는 php를 불러오는 방법입니다.
이렇게 하면 화이트리스트 기반 필터링과 비슷하게 허용하는 php파일만 include시킬 수 있습니다.
☞ 파일 다운로드 대응 방안
서버 읽기, 실행권한을 주지 않으면 되지 않을까? 하고 고민해봤지만
웹페이지에 접속하여 서비스를 누리기 위해서는 디렉토리의 실행권한과 각 페이지마다 읽기권한이 필요합니다.
또한 다운로드 받을 때 읽기 권한만 가지고 있어도 /upload/../index.php 와 같이 php파일을 다운 받을 수 있다는 점이 치멱적인 취약점입니다.
파일 이름 랜덤값 지정?
파일 이름에 랜덤값을 줘서 랜덤하게 업로드된다고 해도
파일에는 접근하지 못하지만
../../ 디렉토리 트레버설 공격으로 서버 내의 파일에 접근이 가능하다는 점은 동일합니다.
그렇기 때문에 위 방법들은 제외하고
DB 서버에 파일 저장
파일 업로드와 동일하게 파일 다운로드 할 때도 DB서버에서 저장된 파일을 가져오면 근본적으로 문제가 해결됩니다.
외부에 업로드 파일을 둬서 서버와 거리를 두는 방식이 있겠고
NAS서버처럼 현재 웹서버와 다른 ip의 서버를 둬서 파일을 저장시키고, php실행을 못하게 막는 방법도 있을 것입니다.
docker run -itd -v /opt/lampp/htdocs/1-1/2-2_board/upload:/mnt/storage centos |
같은 네트워크 대역인 centos 이미지 컨테이너를 하나 추가해서 볼륨으로 연결시켜야 겠다고 생각했지만 볼륨을 설정해도 도 서버에 접속할 수 있는것은 같았습니다. 따로 분리된 서버에 저장하는 작업이 필요합니다.
DB 서버에 파일경로 저장
image.jpg >>> upload/image.jpg 원래는 업로드할 때도 파일경로, 네임이 공개된 채로 저장되고 |
upload/image.jpg >>>> 다운 다운로드할 때도 저장된 파일경로, 이름으로 내오라고 불러오기 때문에 변수값을 그대로 받을 수 밖에 없습니다. |
그와 달리 DB에 파일경로를 저장하는 방식은
image.jpg >>> no=185 저장 업로드할 때는 no 185 번호를 가진 행에 저장시키고 |
no=185 >>> /upload/image.jpg 다운할 때는 185번호의 이미지를 받아오기 때문에 upload 디렉토리에 등록된 이미지들만 다운받을 수 있습니다. |
즉 임의의 파일경로, 이름을 불러올 수 없습니다.
이렇게 하면 /upload/ 상위 디렉토리로 올라갈 수도 없고
등록되어있는 이미지만 다운 가능합니다.
union select도 # 입력이 불가능하기 때문에 SQLi공격이 어렵습니다.
'hacking study > File Download' 카테고리의 다른 글
정보보안 스터디 - 11주차 1일 - 파일 취약점 대응방안, 인증/인가 취약점 (0) | 2022.12.23 |
---|