잡동사니

시큐어코딩(Secure Coding) 교육 후기 본문

IT/Web

시큐어코딩(Secure Coding) 교육 후기

yeTi 2022. 1. 29. 21:55

안녕하세요. yeTi입니다.
오늘은 한국정보보호센터에서 제공하는 Web Java 시큐어코딩 교육을 수강한 후기를 공유하려고 합니다.

수강 계기

회사 프로젝트의 주관사 요구사항으로 수강하게 되었습니다.

강의 정보

  • 기관 : (주)한국정보보호교육센터
  • 교육명 : Web Java 시큐어코딩
  • 강사 : 전상민 수석연구원
  • 기간 : 2022년 01월 19일 ~ 2022년 01월 21일 10:00 ~ 17:00 (18h)

배운점

최신 개발보안 사고 핵심 키워드

웹사이트 해킹
웹사이트를 직접적으로 공격하는 방식

공급망 해킹

  • 개념 : 서비스를 직접적으로 공격하는것이 아니라 제공자 개발자의 PC패치파일감염시킴으로써 서비스에 영향을 주게하는 방식
  • 해결책 예시
    • jar파일을 내려줄때 해시검증으로 신뢰성을 얻는 방법
  • 사례
  • 예시 사이트
    • shodan : 인터넷에 연결된 모든 정보를 수집하는 사이트
    • censys

내가 사용하는 비밀번호가 안전한지 확인

How Secure Is My Password?

제 비밀번호는 해킹하는데 400년 걸린다네요.ㅎㅎ

관련하여, 크리덴셜 스터핑이라는 해킹 공격이 있습니다.

설계 단계 보안 점검 기준

XSS(Cross-Site Scripting)
-개념 : 웹서비스의 데이터로 스크립트를 입력했을 때, 그것을 사용하는 클라이언트에서 해당 스크립트가 실행되는 개념

  • 해결 : 웹 서비스(게시판 등) 요청(스크립트 게시 등)과 응답결과(스크립트 포함 웹 페이지 등)에 대한 검증방법과 적절하지 않은 데이터에 대한 처리방법 설계

업로드 다운로드 파일 검증
예외처리
세션통제

WebGoat

미국의 OWASP에서 제공하는 취약점 연구를 위한 어플리케이션이다.

SQL Injection, XSS 등 다양한 웹 취약점에 대해 알아볼 수 있도록 제공한다.

SQL Injection

개념

  • 서버 요청시 사용한 데이터가 DB의 SQL에 주입되어 사용되는 현상

사례

  • 뽐뿌 개인정보 유출
  • 여기어때 개인정보 유출

WebGoat의 SQL Injection (advanced) 5 step test

tom'; update sql_challenge_users set password = '1234' where userid = 'tom'; --

SQLMap 유틸을 활용한 테이블 목록 추출

> python sqlmap.py -u "http://192.168.100.100/demoshop/shop_board/search.asp" --data "radio=title&searchquery=''" -p searchquery --level=3 --dbs

...

available databases [6]:
[*] master
[*] master2
[*] master3
[*] master4
[*] master5
[*] master6

> python sqlmap.py -u "http://192.168.100.100/demoshop/shop_board/search.asp" --data "radio=title&searchquery=''" -p searchquery --level=3 --dbs -D "master4" --tables

...

Database; master4
[28 tables]
+-----------+
| Comment   |
| members   |
| ...       |
+-----------+

> python sqlmap.py -u "http://192.168.100.100/demoshop/shop_board/search.asp" --data "radio=title&searchquery=''" -p searchquery --level=3 --dbs -D "master4" -T "members" --dump

...

table 'master4.dbo.members' dumped to CSV file '/home/dump/members/csv'

예방책은 native query를 사용하지 말고 preparedStatement 를 사용하는 것이다.

XXE (XML External Entities)

XXE 란 XML의 DTD를 활용하여 임의의 엘리먼트를 추가하고 해당 엘리먼트를 실행시킴으로써 명령어를 수행하는 방식의 취약점이다.

소프트웨어_개발보안_가이드(2021.12.29).pdfp.172를 보면 자세한 정보가 나와있습니다.

WebGoat의 XXE 4 step test

# Fiddler를 활용하여 request break point (F11)
# request body 수정
<?xml version="1.0"?>
<!DOCTYPE another [
  <!ENTITY fs SYSTEM "file:///">
]>
<comment>
  <text>
    yea
    &fs;
  </text>
</comment>

해결법은 XML Parser 에 외부 DTD에 대한 사용을 하지 않도록 설정하는 것이고, XML External Entity Prevention Cheat Sheet 를 확인하면 다양한 예제를 확인할 수 있다.

무료 중소기업 SW 보안약점 진단

서비스명

  • 출장형 진단
  • 내방형 진단

이용대상

  • 중소기업기본법 제2조에 해당하는 중소기업 (SW 사업자 우대)

비용

  • 무료

신청 방법

경로 조작 및 자원 삽입

경로 조작 및 자원 삽입 취약점은 파일을 다운로드하는 인터페이스에 path와 파일명을 노출하면 사용자가 임의의 경로와 파일명을 입력하여 시스템 파일을 다운받아 정보를 획득하는 것이다.

해결 방법은 경로순회공격 위험이 있는 문자(.. / \ ")를 제거하는 필터를 사용한다.

# 올바른 예
replaceAll("\\.", "")
replaceAll("/", "")
replaceAll("\\\\.", "")

# 잘못된 예
# 왜냐하면 ....// 와 같이 입력하면 못 막음
replaceAll("../", "")
replaceAll("..\", "")

XSS (Cross Site Scripting)

Reflective XSS (반사형)
유형

  • 악성 URL로 리다이렉션
  • 피싱 스타일의 개인정보 입력 유도 또는 악성코드 설치 유도
  • URL 매개변수(파라미터의 값) 부분에 아래 점검 문자열을 삽입 후 실행 확인

예시 코드

"><script>alert("xss");</script>
"><script>alert(document.cookie);</script>
"><iframe src="http://attacker.co"></iframe>
"><img src="http://attacker.co.kr">

Stored XSS (저장형)
유형

  • 타 사용자의 인증정보(세션&쿠키) 획득
  • 게시판 근 작성시 아래 점검 문자열을 삽입 후 글 http://10.10.0.153/ 개제
  • 게재된 게시글 열람 시 실행확인

예시 코드

<script>alert("xss");</script>
<script>alert(document.cookie);</script>
<iframe src="https://www.nate.com/"></iframe>

해결책은 서버의 데이터가 웹서비스에 스크립트로 동작할 수 있는 부분에 스크립트 구문을 치환한다.

keyword = keyword.replaceAll("&", "&amp;");
keyword = keyword.replaceAll("<", "&lt;");
keyword = keyword.replaceAll(">", "&gt;");
keyword = keyword.replaceAll("\"", "&quot;");
keyword = keyword.replaceAll("'", "&#x27;");
keyword = keyword.replaceAll("/", "&#x2F;");
keyword = keyword.replaceAll("\\(", "&#x28;");
keyword = keyword.replaceAll("\\)", "&#x29;");

프로세스 검증누락

프로세스를 진행하는 과정에서 데이터의 변경에 대해 검증하지 않는 취약점이다.

예시

  • 게시글의 모드 파라메터를 변경하여 편집하기
  • 결제시 결제 금액을 변경하게 구매하기
  • 사용유무 플래그를 변경하여 재사용하기

해당 취약점은 프로세스 진행과정에 검증 로직을 추가하여 해결할 수 있다.

HACKER FACTORY 에서 제공하는 문제로 테스트를 해볼 수 있다.

소프트웨어_개발보안_가이드(2021.12.29).pdfp.202, p.213, p.220 를 참고하면 좀더 자세한 내용을 확인할 수 있다.

도구

취약점 진단도구인 OWASP ZAP 을 활용하여 웹 취약점을 자동화하여 점검할 수 있고,
정적 분석기인 FindBugs, Find Security Bugs 을 활용하여 코드레벨에서 정적 분석을 수행할 수 있다.

느낀점

수업 자료로 한국인터넷진흥원과 같이 공공기관의 가이드를 기반으로 하고 있어서 강의 내용에 신뢰성이 있고 실예와 실습도 포함되어 있어서 지루하지 않고 유익하다고 느꼈습니다.

그리고 프로세스 검증누락 취약점 의 사례를 보면서 서버 API 개발자로써 클라이언트의 API 요청을 신뢰하고 서버측 데이터 검증을 최소한으로 하면 된다는 생각을 가지고 있었는데 이것이 안일한 생각이었다고 느꼈고,
앞으로는 클라이언트에서 요청하는 데이터는 언제든 변조가 가능하다는 생각으로 데이터 검증을 하도록 해야겠습니다.

마지막으로 점심도 제공되어서 매우 만족합니다.

참고자료

Comments