생성형 AI 활용한 보안 프로그래밍 기술 - DAY3(2)

aiden·2025년 11월 28일

Port Scanner

소켓

네트워크에서 데이터를 주고받기 위한 통신 통로.
네트워크 통신용 인터페이스로, 프로그램이 네트워크로 데이터를 주고받기 위해 OS에 요청할 수 있는 표준화된 통신 엔드포인트(endpoint)이다.

운영체제는 네트워크 프로토콜(TCP/IP 등)을 직접 제어하게 하지 않는다. 대신 소켓이라는 표준 인터페이스를 제공해서 프로그램이 다음을 요청할 수 있게 한다.

  • TCP 연결 요청 (connect())
  • 서버 소켓 대기 (bind(), listen())
  • 연결 수락 (accept())
  • 데이터 송·수신 (send(), recv())
  • 연결 종료 (close())

즉, 네트워크 통신의 모든 동작은 소켓을 통해서만 이루어지며 다음과 같은 구조로 동작한다.

프로그램 → 소켓 API → OS → 네트워크 스택(TCP/IP) → 외부 네트워크

파이썬에서 소켓 사용

import socket

# 소켓 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# AF_INET: IPv4 주소 사용
# SOCK_STREAM: TCP 소켓 (연결 지향형)

socket.socket()은 OS의 소켓 시스템 호출을 감싸는 함수다.
운영체제에게 네트워크 통신용 소켓을 하나 생성하라고 요청하는 것이다.

socket.socket(address_family, socket_type)
  1. address_family

    네트워크 프로토콜의 주소 체계를 지정한다.

의미
AF_INETIPv4 주소 체계 사용
AF_INET6IPv6 주소 체계 사용
  1. socket_type

    전송 계층 프로토콜을 선택한다.

의미
SOCK_STREAMTCP 사용 (연결형, 신뢰 전송)
SOCK_DGRAMUDP 사용 (비연결형, 비신뢰 전송)

포트

포트 번호란 IP 주소와 함께 사용되는 가상 통신 주소이다. 0부터 65535까지의 숫자로 이루어지며, 웹 서버(포트 80)나 보안 웹(포트 443)처럼 특정 서비스에 할당된 번호와 사용자가 임의로 사용할 수 있는 동적 포트 등으로 나뉜다.

포트 상태

  • Open (열림) - 해당 포트 번호를 이미 어떤 프로세스가 listen() 중이다. 즉, TCP 서버가 대기 중
  • Closed (닫힘) - 해당 포트는 존재하지만 서비스가 아무것도 bind() 하지 않음. 즉, OS가 이 포트를 사용 중인 프로세스를 갖고 있지 않다.
  • Filtered (필터링됨) - TCP 요청이 방화벽/라우터/보안 장비에 의해 차단되었다. 즉, 패킷이 목적지 포트의 운영체제까지 도달하지 못함.
상태트래픽 흐름TCP 응답의미
OpenSYN → 서버 도착SYN/ACK서버 프로세스가 해당 포트에서 LISTEN 중
ClosedSYN → 서버 도착RST/ACK해당 포트를 사용하는 프로세스 없음
FilteredSYN → 방화벽에서 차단응답 없음 또는 ICMP패킷이 OS까지 도달하지 못함

포트 스캔

특정 컴퓨터의 어떤 포트가 열려있는지 확인하는 과정

즉, 네트워크 장비(서버, PC 등)의 각 포트 번호에 대해 연결을 시도하거나 특정 패킷을 보내고 그 응답을 분석해서 해당 포트가 실제로 서비스 중인지, 차단됐는지, 비어 있는지를 알아내는 작업이다.

❗왜 포트 스캔을 하는가

  • 어떤 서비스가 실행 중인지 확인
  • 취약점 탐지 - 열려있는 서비스의 취약점을 공격

KeyLogger

사용자가 키보드로 입력하는 내용을 기록하는 프로그램.
해킹, 악성코드, 모의해킹, 디버깅 등 다양한 목적에 사용된다.

Ransomware

암호화(Encryption)

정보를 읽을 수 없는 형태로 변환하는 것.

암호화의 목적

  • 기밀성 (Confidentiality) - 중요한 정보를 다른 사람이 읽지 못해야 함

  • 무결성 (Integrity) - 정보가 변경되지 않아야 함

  • 인증 (Authentication) - 정보의 출처 확인

암호화의 핵심 요소

  • 평문 (Plaintext) - 암호화하기 전의 원본 데이터

  • 암호문 (Ciphertext) - 암호화한 후의 데이터. 읽을 수 없는 형태

  • 암호화 키 (Encryption Key) - 암호화와 복호화에 사용하는 데이터. 키 없이 복호화 불가

  • 암호화 알고리즘 - 암호화를 수행하는 방법(예: XOR, AES, RSA)

암호화 방식의 종류

  1. 대칭키 암호화 (Symmetric Encryption)
    암호화 키 = 복호화 키
    암호화와 복호화 수행 시 동일한 키를 사용
    예: XOR, AES
    장점: 빠름
    단점: 키를 안전하게 전달해야 함

  2. 비대칭키 암호화 (Asymmetric Encryption)
    암호화 키 ≠ 복호화 키
    공개키와 개인키 쌍 사용
    예: RSA
    장점: 키 전달이 안전함
    단점: 느림

구분암호화 키설명장점단점
대칭키 암호화 (Symmetric Encryption)암호화 키 = 복호화 키암호화와 복호화 수행 시 동일한 키를 사용XOR, AES빠름키를 안전하게 전달해야 함
비대칭키 암호화 (Asymmetric Encryption)암호화 키 ≠ 복호화 키공개키와 개인키 쌍 사용RSA키 전달이 안전함느림

XOR 연산

  • 자기 역원 - A XOR B XOR B = A

  • 암호화와 복호화가 동일
    암호화: 평문 XOR 키 = 암호문
    복호화: 암호문 XOR 키 = 평문

평문: 5
키: 3
.
암호화:
5 XOR 3 = 6 (이진수: 101 XOR 011 = 110)
.
복호화:
6 XOR 3 = 5 (이진수: 110 XOR 011 = 101)

평문: "A"
키: "K"
문자 "A"의 ASCII 코드: 65 (이진수: 01000001)
키 "K"의 ASCII 코드: 75 (이진수: 01001011)
.
암호화:
01000001 (A)
X 01001011 (K)
───────────
00001010 (결과: 10)
.
복호화:
00001010 (암호문)
X 01001011 (K)
───────────
01000001 (A - 원본 복구)

❗키가 짧은 경우

평문: "Hello" (5바이트)
키: "AB" (2바이트)
.
평문: H e l l o
키: A B A B A (키를 반복하여 확장)
.
H XOR A = 암호문[0]
e XOR B = 암호문[1]
l XOR A = 암호문[2]
l XOR B = 암호문[3]
o XOR A = 암호문[4]

파일 암호화

파일 암호화의 절차

  1. 파일 읽기 - 파일을 바이트(byte) 형태로 읽어옴

  2. 암호화 키 생성 - 암호화에 사용할 키 생성

  3. XOR 연산 수행 - 파일 데이터와 키를 XOR 연산

  4. 암호화된 데이터 저장 - 암호화된 바이트를 파일에 저장

profile
파인애플 좋아하세요?

0개의 댓글