[SK shieldus Rookies 19기][애플리케이션 보안] 1일차

부재중입니다·2024년 3월 12일

애플리케이션 보안

보안 가이드 참고

참고 ⇒ https://www.kisa.or.kr/2060207
SW 개발보안 가이드 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=5&lang_type=KO&page=1
SW 보안약점 진단 가이드 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=9&page=2
Python 시큐어코딩 가이드 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=13&page=1
JavaScript 시큐어코딩 가이드 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=14&page=1
모바일 전자정부서비스 앱 소스코드 검증 가이드라인 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=3&page=2
주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=12&page=2
공개SW를 활용한 소프트웨어 개발보안 검증가이드 ⇒ https://www.kisa.or.kr/2060204/form?postSeq=10&page=3

기본 프로그램 다운로드

WebGoat

https://drive.google.com/file/d/1qjAzKSw9sEw6yOaZn1WTD5VR467cl33R/view?usp=sharing

Kali Linux

https://cdimage.kali.org/kali-2023.4/kali-linux-2023.4-vmware-amd64.7z

bWAPP 가상머신 이미지

https://sourceforge.net/projects/bwapp/files/bee-box/bee-box_v1.6.7z/download

Vmware workstation

https://www.vmware.com/go/getworkstation-win

#1 Vmware Workstation

VMware-workstation-full-17.5.1-23298084.exe 설치 (기본 설정을 유지)

아래와 같은 오류가 발생하는 경우, 재부팅 후 Microsoft Visual C++ 2017 Redistributable (x64) Version 14.x 버전을 다운로드해서 설치

#2 WebGoat

FullstackLAB_20240312.zip 압축을 C:\ 해제

정상적으로 압축 해제하면 아래와 같은 구조를 가지게 됨

#3 bee-box와 kali-linux

bee-box_v1.6.7z 파일과 kali-linux-2023.4-vmware-amd64.7z 파일을 C:\FullstackLAB 폴더 아래에 압축 해제 (본인이 원하는 폴더에 압축 해제해도 무관)

VMware에 bee-box와 kali-linux 이미지 추가 후 실행

#1 VMware 실행

#2 Open 메뉴에서 위에서 압축 해제한 디렉터리의 이미지를 선택 후 열기 버튼을 클릭


#3 가상머신 실행

#4 가상머신 로그인 계정

Kali Linux ⇒ kali / kali

#5 bee-box 가상머신에서 브라우저를 실행하고 http://localhost/bWAPP로 접속

#6 bee-box 키보드를 변경




각 가상머신의 IP를 확인 후 hosts 파일에 등록

#1 kali

위쪽 터미널 실행

┌──(kali㉿kali)-[~]
└─$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.40.129  netmask 255.255.255.0  broadcast 192.168.40.255
        inet6 fe80::403d:144a:a460:bd5b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ca:54:d8  txqueuelen 1000  (Ethernet)
        RX packets 103  bytes 16804 (16.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40  bytes 11528 (11.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4  bytes 240 (240.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 240 (240.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#2 bee-box

bee@bee-box:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:3e:ba:70  
          inet addr:192.168.0.222  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe3e:ba70/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1361 errors:0 dropped:0 overruns:0 frame:0
          TX packets:248 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:138001 (134.7 KB)  TX bytes:32127 (31.3 KB)
          Interrupt:16 Base address:0x2024 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1004 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1004 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:724833 (707.8 KB)  TX bytes:724833 (707.8 KB)

#3 본인 PC

C:\Users\crpark> ipconfig

Windows IP 구성


이더넷 어댑터 이더넷:						⇐ 유선 네트워크를 사용하고 있는 경우 

   미디어 상태 . . . . . . . . : 미디어 연결 끊김
   연결별 DNS 접미사. . . . :

무선 LAN 어댑터 로컬 영역 연결* 9:

   미디어 상태 . . . . . . . . : 미디어 연결 끊김
   연결별 DNS 접미사. . . . :

무선 LAN 어댑터 로컬 영역 연결* 10:

   미디어 상태 . . . . . . . . : 미디어 연결 끊김
   연결별 DNS 접미사. . . . :

무선 LAN 어댑터 Wi-Fi:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::622c:5a77:1e68:babd%13
   IPv4 주소 . . . . . . . . . : 192.168.0.143		⇐ IP가 할당된 무선 LAN 어댑터를 확인
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . : 192.168.0.1

이더넷 어댑터 VMware Network Adapter VMnet1:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::123a:7830:2bb5:3e6e%43
   IPv4 주소 . . . . . . . . . : 192.168.65.1
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . :

이더넷 어댑터 VMware Network Adapter VMnet8:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::a201:eee3:eca8:5fd7%44
   IPv4 주소 . . . . . . . . . : 192.168.40.1
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . :

이더넷 어댑터 Bluetooth 네트워크 연결:

   미디어 상태 . . . . . . . . : 미디어 연결 끊김
   연결별 DNS 접미사. . . . :

C:\Users\crpark>

#4 hosts 파일에 등록할 내용을 작성 (앞에서 확인한 본인 환경의 IP 주소를 사용)

192.168.40.129 kali.linux
192.168.0.222 bee.box
192.168.0.143 host.pc

#5 내 PC의 hosts 파일에 #4번 내용을 등록 (관리자 권한으로 명령 프롬프트를 실행)

C:\Windows\system32> notepad c:\Windows\System32\drivers\etc\hosts

#6 bee-box 가상머신의 hosts 파일에 #4번의 내용을 추가

bee@bee-box:~$ sudo gedit /etc/hosts
[sudo] password for bee: bug

#7 kali 가상머신의 hosts 파일에 #4번의 내용을 추가

┌──(kali㉿kali)-[~]
└─$ sudo apt update

┌──(kali㉿kali)-[~]
└─$ sudo apt install gedit -y

┌──(kali㉿kali)-[~]
└─$ sudo gedit /etc/hosts

사용하지 않을 경우 가상머신은 Suspend 하기

애플리케이션 보안 / 개발보안 / 시큐어코딩의 필요성

  • 안티바이러스(Anti-Virus): 개인 사용자들이 자주 사용하는 보안 소프트웨어로, 주로 악성 소프트웨어와 바이러스로부터 사용자의 컴퓨터를 보호하는 데 쓰인다.
  • 방화벽(Firewall): 네트워크 보안 시스템으로, 허용된 데이터만 네트워크를 통과하도록 제어한다.
  • IDS/IPS (Intrusion Detection System/Intrusion Prevention System): 네트워크에 대한 침입 탐지 및 예방을 담당하는 시스템입니다. 비정상적인 트래픽을 감지하고 대응한다.
  • 웹방화벽(Web Firewall): 웹 기반의 공격, 예를 들어 SQL 인젝션, 크로스 사이트 스크립팅 (XSS) 등을 방어하기 위해 사용된다.




애플리케이션의 보안 문제점을 식별하는 데는 정적 분석과 동적 분석 두 방법 모두 필요하다. 이 두 개는 상호 보완적이며, 보안 검증 과정에서 함께 사용된다.

정적 분석

애플리케이션 실행 없이 소스 코드의 내용, 형태, 구문을 분석한다.
문제를 확인하기 위한 코드 리뷰에 활용된다.
SQL 인젝션과 같은 문제를 코드의 구문을 통해 식별할 수 있다.
안전한 코드 예시: cursor.execute(query, (param1, param2, ...))
취약한 코드 예시: cursor.execute(f"select ... where id = {name}")

동적 분석

애플리케이션을 실제로 실행하여 예상 결과가 나타나는지 확인한다.
디버깅, 부하 테스트, 모의 해킹/침투 테스트 등에 사용된다.
인증 및 인가 검증과 같이 정적 분석으로 확인하기 어려운 부분에 유용하다.
실제 사용 예시: 로그인하지 않은 상태와 로그인한 상태에서 게시판 상세 페이지 접근을 시도하여 접근 제어를 확인할 수 있다.
이렇게 각각의 분석 방법은 애플리케이션 보안의 다양한 측면을 평가하며, 이 두 방법을 결합함으로써 효과적인 보안 검증 체계를 구축할 수 있다.

HTTP(HyperText Transfer Protocol)


  • HTTP is simple

  • HTTP is extensible

  • HTTP is stateless, but not sessionless

    • 상태 정보를 유지할 필요가 있을 경우에는 쿠키나 세션 같은 기술을 사용
    • 채널 접속 정보 사용하여, 동일한 클라이언트, 동일한 상태를 유지하기 위해 각각의 요청들에 세션 정보를 부가해 주기도 함
  • HTTP and connections

    • HTTP/1.0 : 요청/응답 쌍에 대한 각각의 TCP 연결을 사용
    • HTTP/1.1 : 파이프라이닝 기법과 지속적 연결의 개념을 도입 (같은 TCP 연결을 Connection 헤더를 사용해 복수의 요청/응답 처리)
    • HTTP/2 : 단일 연결을 통해 멀티플렉싱 다중화, 연결을 더 효율적으로 유지

HTTP 흐름 (연결 → 요청 → 응답 → 연결해제)




0개의 댓글