배성민 멘토님 웹 취약점(코드 관점) 멘토링
취약점 점검 개론, 취약점 점검 실습
코딩 실력, 근성, 꼼꼼함 -> 대부분 가지고 있다
- A -> 코드 리뷰, 웹 접근성, 웹 취약점, 웹표준, 트러블 슈팅 등 경쟁력을 가져야 한다.
- 정성적인 노력이 들어가는 부분
웹이 취약한 이유
HTTP -> 브라우저 -> EOS, IE 12지원이 끝남, 개발자 도구가 오픈 -> 개발자 도구를 통해 소스가 드러나게 된다.
OWASP Top10
Injection이 탑텐에서 빠진 적이 한 번도 없다.
SQL Injection
여기어때 개인정보 99만건 유출.. SQL인젝션 공격이 원인
아이디만 있으면 로그인이 되는 코드이다.. -> 백엔드 개발자가 실수할 것 같은 부분을 SQL Injection으로 넣는 것이다.
백엔드 개발자의 실수를 예상하며 try의 연속이다..
FE? BE?
둘 다 신경써야 하지만 백엔드에게 조금 더 책임이 있다. filter(마크업, FE) -> validation(JS, FE) -> verification(백엔드)
filter(마크업)에서 처리될 수 있는 것(안전하지 않음) ex) input, textarea 등 태그에 들어가는 속성들이 속성들이 특징 -> 필터가 돼야 한다. 백엔드로 전송되는 것
- maxlength -> 글자수 제한, 개발자 도구로 maxLength를 바꾸면 무수히 많은 글자를 넣을 수 있음
- require -> 필수 값
- accept -> 확장자
- pattern -> 정규표현식
-> 필터 단계에서도 처리하고 validation 단계에서도 처리해야 한다.
validation
JS에서 처리될 수 있는 것(안전하지 않음) ex)
- Ajax 구간(폼 요소 데이터 확인)
- JS에서만 입력 값 도메인 검증을 하지는 않는지
- 정규표현식
- 개인정보 비식별 처리 -> 이름만 있으면 개인정보가 아니다: 이름으로 개인을 식별할 수 없기 때문에 but 이름과 휴대폰 번호를 조합하면 개인정보이다. id는 개인정보이다. id는 하나이기 때문에 내가 식별이 된다. 아이디를 뒤에 *표시하는 이유 -> 개인정보가 식별되기 때문에, 이런 것을 개인정보 비식별 처리라고 한다.
Verification
불충분한 검증 조심
- 확장자 체크시 contains 메서드를 사용하면 test.png.sh 같은 형식의 파일도 업로드 가능
다양한 취약점 점검 - URL 요청 변조: 입력 도메인 값 변조 확인
ex) https://naver.com/mypage/change.do?id=bsm9100 -> delete.do, remove.do로 한 번씩 try하면서 유추하는 것이다.
XSS
게시판 입력
- 게시판에 글제목, 내용에 태그 넣어보기
- img태그를 만들고 src속성에 웹쉘을 넣기
- iframe태그를 만들고 src속성에 웹쉘을 넣기 위 예제랑 똑같음
취약점 점검 실습 - 파일 업로드 취약점, DOS, 관리자 권한 탈취 취약점
- GET요청을 하면 안되는 페이지에서 GET요청을 한 경우
- GET 요청 접근을 막는다.
- 관리자 권한 탈취 취약점
- 파일 업로드 취약점
파일 업로드 취약점, DOS, 관리자 권한 탈취 취약점
로컬스토리지에 이름, 계좌번호가 들어있다면? -> 브라우저를 꺼도 사라지지 않는다, 세션은 사라지지않는다. -> 이름, 계좌번호를 엮으면 개인식별이 되며 개인정보가 된다. -> PC방에서 다른 사람이 이전 사람의 이름, 계좌번호(개인 정보)를 탈취할 수 있다. -> 취약점 분석해서 제보 했어요 -> 다른 사람과의 차별점, 뱅킹 코드를 변경해본 경험이 있다.
취약점 점검 팁 - 개발자도구를 켜놓는 습관을 들일 것
- 소스 탭에서 스크립트 부분 보기
- 네트워크 탭에서 데이터가 어떻게 오고 가는지 분석
- GET 방식으로 호출되는 부분이 있는지 확인해보기
- 입력 도메인 값 변조 확인(FE)
계속 try해보고 취약점 찾아서 제보하기
취약점 점검 팁 - CRUD 단계를 살펴보기
- 대개 회원가입, 수정과 같은 페이지에서 취약점이 많이 노출
- 파일 등록 프로세스가 있다면 어떤식으로 파일이 등록되는지 확인
- 게시판 조회시 Injection에 대해 생각해보기
취약점 점검 팁 - 상황을 만들어보기
- 스스로 백엔드 개발자라면 어떻게 구현했을지 생각해보고 취약점을 상상해보기
- 스스로 공격자라면 어떤 상황을 원했을지 생각해보기
멘토님은 본래 FE셨다.
모바일에서 휘원가입할 때 SNS 인증 코드를 계속 호출하는 경우
- SNS호출하는데 15원 정도 든다.
- 제한하는 장치가 없으면 취약점이다.
이미지 업로드할 때 validation
- 스크립트에서 파일 확장자를 파싱해서 파일이름.jpg를 AJAX보낼 때 체크하면 된다.