[SW개발보안] SR1-10. 업로드·다운로드 파일 검증
위험한 형식 파일 업로드
파일 업로드 기능이 존재하는 경우,
파일의 크기와 개수를 제한하지 않고,
파일의 종류를 제한하지 않고,
외부에서 접근 가능한 경로에 파일을 저장하는 경우 발생
→ 서버의 연결 자원, 디스크 자원을 고갈시켜 정상적인 서비스를 방해
→ 서버 사이드에서 동작하는 프로그램을 업로드 후 실행하여 해당 서버의 제어권을 탈취 ⇒ 웹쉘(WebShell)
→ 악성 코드의 유포지로 악용
[방어기법]
-
파일의 크기와 개수를 제한
-
파일의 종류를 제한
-
확장자 검증
-
Content-Type 검증
-
File Signature = Magic Number(Code) ⇒ https://www.garykessler.net/library/file_sigs.html
-
외부에서 접근할 수 없는 경로에 파일을 저장 ⇒ Web Root 밖 또는 Web Document Root 밖
http://www.test.com/data/xyz.html
해당 서버에 디렉터리 /usr/html/data/xyz.html
-
저장에 사용하는 파일명과 파일경로를 외부에서 알 수 없도록 처리
-
업로드 파일을 저장할 때 실행 속성을 제거 후 저장
[클라이언트 측 소스코드]
<form enctype="multipart/form-data" method="post" … >
<input type="text" name="age">
<input type="text" name="email">
<input type="file" … >
</form>
[클라이언트 측 소스코드]
<form enctype="multipart/form-data" method="post" … > : 업로드기능이군
<input type="text" name="age">
<input type="text" name="email">
<input type="file" … > : file은 age,email처럼 사용하기 어렵군..
</form>
[서버 사이드 소스 코드]
MultipartHttpServletRequest
MultipartFile
[서버 사이드 소스 코드]
MultipartHttpServletRequest
MultipartFile (파일 크기, 이름 등 확인 → 파일을 저장하게 만듬)
→ Multipart 가 보이면 파일 업로드 기능이 있구나 라고 알기
-
일반 주소처럼 파일을 넣기에는 어려움
-
파일 내용 제각각, 파일 이름, 경로 등 넣을게 많음
-
test.jsp?name=kkk&email=kkk@naver.com&fileupload=????
-
boundary=[values]
-
→ URL에서 & 역할과 같음(test.jsp?name=kkk&email=kkk@naver.com)
-
위에 그림을 굳이 표현하자면
-
filename=test.txt & filename=test1.txt
-
서버 사이드 스크립트 언어로 제작
-
1개의 파일로 구성
-
운영체제 명령어 삽입 취약점을 이용한 공격을 쉽게 할 수 있도록 구현
웹쉘
-
서버 사이드 스크립트 언어로 제작
-
1개의 파일로 구성
-
운영체제 명령어 삽입 취약점을 이용한 공격을 쉽게 할 수 있도록 구현
c99madshell 검색
open webshell project 검색
무결성 검사 없는 코드 다운로드
외부로부터 가져온 파일(코드)에 대해서는 반드시 무결성 여부를 검증 후 최소 권한으로 실행(사용)해야 한다.
경로조작 및 자원삽입
~~~~~~~~
외부 입력값을 파일의 식별자로 사용하는 경우,
지정된 경로를 우회할 수 없도록 경로 조작 문자열 포함 여부를 확인 후 사용해야 한다.
인증과정
사용자가 제시한 정보를 바탕으로 사용자를 확인하는 과정 ⇒ 사용자가 제시한 인증 정보가 서버에 존재하는지 확인하는 과정
login.do?id=admin&pw=abcd
--------------------------->
<---------------------------
로그인 성공 일치하는 정보가 있으면
로그인 실패 일치하는 정보가 없으면
login.do?id=admin&pw=abcd
~~~~
1) 사전대입
2) 무작위대입
인증 기능을 악용하여 특정 사용자의 인증 정보를 확인하는 것을 방어하기 위해서는
입력값의 개수를 증가 ⇒ CAPTCHA = 자동화된 요청을 방해
출력값의 경우를 증가 ⇒ 더 이상 확인 안 해줘 = 인증 시도 회수 제한
암호이용안내서
패스워드 선택 및 이용 안내서(2019.06)
https://seed.kisa.or.kr/kisa/Board/53/detailView.do
패스워드 생성, 관리 규칙
패스워드 생성 규칙
-
복잡도 규칙을 준수
-
변경 및 재설정 때도 생성과 동일한 규칙을 적용
패스워드 관리 규칙
-
변경 주기 정책
-
히스토리 정책
-
최소 사용 기한 정책
비슷한 문자를 대체해서 사용하는 경우
p@ssw0rd
a o
I love you
i 10v2 u
암호화
-
안전한 암호 알고리즘을 사용
-
안전한 키 길이를 사용
-
안전하지 않은 암호화 알고리즘
-
(해쉬) MD4, MD5, SHA1
-
(대칭키) DES
-
인코딩/디코딩 기법을 이용해서 암복호화 기능을 구현하는 경우
-
암호화 키를 안전하게 보관 ⇒ 암복호화 처리하는 곳, 암호화된 결과를 저장하는 곳 등과 물리적으로 분리된 곳에 저장
스니핑 vs 스푸핑
스니핑 공격은 스니퍼를 이용하여 네트워크상의 데이터를 도청하는 행위를 말한다. 스니퍼란 컴퓨터 네트워크상에 흘러 다니는 트래픽을 엿듣는 도청장치라고 할 수 있다.
스푸핑 공격은 외부 악의적 네트워크 침입자가 임의로 웹사이트를 구성하여 일반 사용자들의 방문을 유도해 인터넷 프로토콜인 TCP/IP의 구조적 결함을 이용하여 사용자의 시스템 권한을 획득한 뒤 정보를 빼가는 해킹 방법이다. 스푸핑 공격의 종류에는 ARP 스푸핑, IP 스푸핑, DNS 스푸핑, 이메일 스푸핑 등이 존재한다.
관리자 페이지
-
관리자 페이지와 일반 사용자 페이지를 분리해서 개발, 운영
-
내부망에서만 접근할 수 있도록 제한
-
관리자 페이지 접속 정보를 알 수 없도록 한다. ⇒ IP, 잘 알려지지 않은 포트번호
-
HTTPS를 통해서 서버스
-
관리자 페이지에 접속할 수 있는 PC(IP)를 제한(한정한다.)
-
외부에서 관리자 페이지 접속을 위해서는 VPN을 이용
대칭키 vs 비대칭키
대칭키 = 암호화에 사용한 키와 복호화에 사용한 키가 동일
= 유일키
= 비밀키
= 관용 암호화 방식
⇒ AES, SEED, ARIA, LEA, …
⇒ 단점: 키 분배 및 관리 문제
비대칭키 = 암호화에 사용한 키와 복호화에 사용한 키가 상이
~~~~~~~~
키쌍 ⇒ 개인키
공개키
⇒ RSA, ECC, KCDSA, …
Apub Bpub
A ---------------------> B
Apri Bpri
[기밀성 서비스를 제공하는 방법]
1) Bpub 취득 +---> 4) Bpri로 데이터를 보호화
2) Bpub로 데이터를 암호화 |
3) 암호화된 데이터를 전달 ----+
[인증, 원본증명, 부인방지 서비스를 제공하는 방법]
1) Apri로 데이터를 암호화 +---> 3) Apub 키를 취득
| 4) Apub 키를 이용해서 데이터를 복호화
2) 암호화된 데이터를 배포 -------+
송신자의 개인키로 암호화하는 것을 서명,
송신자의 공개키로 복호화하는 것을 서명 검증 이라고 함
'슈개's IT > SW개발보안' 카테고리의 다른 글
[SW개발보안] 개발보안 기타 정리 내역2 (0) | 2021.01.23 |
---|---|
[SW개발보안] 개발보안 기타 정리 내역1 (0) | 2021.01.23 |
[SW개발보안] SR1-7. HTTP 프로토콜 유효성 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-6. 웹 기반 중요기능 수행 요청 유효성 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-5. 웹 서비스 요청 및 결과 검증 (0) | 2021.01.23 |