Language/PYTHON

[secolab] Python 시큐어코딩 - 애플리케이션

얀 짱 2026. 8. 15. 05:38


SQL 인젝션

개요

  • 입력값에 쿼리 조작 문자열 포함 여부를 확인하지 않고 쿼리문 생성 및 실행에 사용하는 경우 발생
  • 입력값에 포함된 쿼리 조작 문자열에 의해 구조와 의미가 변경되어 의도하지 않은 형태의 쿼리가 실행 

예상 피해

  • 권한 밖의 데이터 조회, DBMS 서버의 제어권 탈취, 쿼리를 통해 제공할 기능 (서비스) 우회 등 

 

SQL 인젝션 방어

시큐어코딩 기법
  • 외부 입력값에 쿼리 조작 문자열이 포함되지 않도록 입력값 검증 후 사용
    • 입력값에 쿼리 조작 문자열이 포함된 경우
      • 입력값 오류 메시지와 함께 반환
      • 입력값에 쿼리 조작 문자열을 제거 또는 의미 없도록 이스케이프 처리 후 사용
  • 구조회된 쿼리, 파라미터화 된 쿼리를 실행
  • 파이썬 execute 함수를 사용할 때
    • 첫번째 인자에 쿼리문의 구조를 정의한 문자열을 정의한 튜플을 전달
    • 두번째 인자에 쿼리문에 적용될 변수값을 정의한 튜플을 전달하는 것으로 방어 가능 
공격이 확대되는 것을 방지 
  • 오류 메시지에 SQL 실행과 관련한 내용이 포함되지 않도록 처리
  • 애플리케이션에서 사용하는 DB 사용자의 권한을 최소로 부여 

 

코드 삽입

개요

  • 공격자가 소프트웨어의 의도된 동작을 변경하도록 임의 코드를 삽입하여 소프트웨어가 비정상적으로 동작하도록 하는 공격 기법
  • 코드 삽입 공격 유발 함수: eval(), exec() 등

예상 피해

  • 권한 탈취, 인증 우회, 시스템 명령어 실행 등

 

eval() 함수 예제

 

exec() 함수 예제

 

코드 삽입 공격 방어

대응 방법
  • 동적 코드를 실행할 수 있는 함수를 사용하지 않는다.
  • 외부 입력값에 대하여 화이트리스트 방식으로 검증
  • 유효한 문자만 포함하도록 사용자 입력값 필터링

 

경로 조작 및 자원 삽입

개요

  • 검증되지 않은 외부 입력값을 통해 파일 및 서버 등 시스템 자원에 대한 접근 혹은 식별을 허용할 경우, 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근할 수 있는 보안약점
  • 경로 조작 및 자원 삽입 취약점 유발 함수: subprocess.Popen(), os.pipe(), socket 연결 

예상 피해

  • 자원의 수정/삭제, 시스템 정보 누출, 시스템 자원 간 충돌로 인한 서비스 장애
  • 허용하지 않은 권한을 획득하여, 설정에 관계된 파일 변경 또는 실행이 가능 

 

경로 조작 예제

 

자원 삽입 예제

 

경로 조작 및 자원 삽입 공격 방어

대응 방법
  • 적절한 검증
  • 사전에 정의된 리스트에서 선택
  • 경로순회 공격의 위험이  있는 문자를 제거할 수 있는 필터 이용 
    • /, \, . 등

 

XSS

개요

  • 공격자가 전달한 스크립트 코드가 사용자 브라우저를 통해서 실행

예상 피해

  • 사용자 브라우저 또는 PC의 정보를 탈취
  • 가짜 페이지를 생성 후 사용자 입력을 유도하여 입력한 값을 탈취
  • 희생자 PC의 제어권 탈취

 

Reflected XSS

  • 입력값에 스크립트 포함 여부를 확인하지 않고 다음 화면 출력에 사용되는 경우에 발생
  • 악의적인 스크립트가 포함된 url을 이메일, 메신저, 문자 등을 통해 사용자에게 노출시켜 사용자의 접근 유도
  • 취약한 서버에는 공격자의 스크립트 코드가 남지 않으며, 공격자의 스크립트 코드를 전달하는 경유지로만 활용 

 

Stored XSS

  • 게시판과 같이 입력값을 저장하고 조회하는 기능을 제공하는 경우, 실행 가능한 스크립트 코드가 입력값과 출력값에 포함되었는지 여부를 확인하지 않고 사용하는 경우 발생
  • 공격자가 악의적인 스크립트를 취약한 서버에 등록하고, 사용자가 해당 데이터에 접근 시  공격자가 저장한 스크립트가 실행
  • 공격자의 스크립트 코드가 서버에 남아서 지속적으로 공격에 사용 -> Persistent XSS

 

DOM Based XSS

  • 개발자가 작성한 스크립트 코드의 취약점을 활용한 공격 기법
  • 실행 가능한 스크립트 코드 포함 여부를 확인하지 않고, 입력값을 DOM 객체 생성에 사용하는 경우 발생
  • 서버와의 상호작용 없이 희생자 브라우저에서 악성 스크립트 코드가 실행 

 

DOM (Documnet Object Model, 문서 객체 모델)

- W3C의 표준 객체 모델
- XML이나 HTML 문서에 접근하기 위한 인터페이스
- 문서 내의 모든 요소를 계층 구조로 정의하고, 각각의 요소에 접근하는 방법을 제공 

JavaScript를 이용한 DOM 변경

- 새로운 HTML 요소나 속성을 추가
- 존재하는 HTML 요소나 속성을 제거
- HTML 문서의 모든 HTML 요소를 변경
- HTML 문서의 모든 HTML 속성을 변경
- HTML 문서의 모든 CSS 스타일을 변경
- HTML 문서에 새로운 HTML 이벤트를 추가
- HTML 문서의 모든 HTML 이벤트에 반응

 

XSS 방어

시큐어코딩 기법

  • 외부 입력값을 화면 출력에 사용하는 경우 실행 가능한 스크립트 코드가 포함되었는지 확인하고 사용
  • 데이터베이스에 저장된 데이터를 화면 출력에 사용할 때 안전한 문자열로 이스케이프 해서 출력
  • 웹 프로그래밍 언어 및 프레임워크에서 가이드하는 방법에 따라 구현 

 

SSTI (Server Side Template Injection)

개요

  • 웹 프레임워크의 서버 측 템플릿을 공격 벡터로 사용
  • 공격자가 전달한 악성 페이로드가 서버 측에 실행되면서 생기는 취약점
  • 템플릿에 사용자 입력이 포함되는 방식의 약점을 사용

예상 피해

    • 웹 응용프로그램 내부를 파악하고 쉘 실행이 가능

 

SSTI 방어

  • 사용자 입력이 템플릿 생성에 사용되지 않도록 해야 함
  • 템플릿 문자열 생성 시 템플릿의 딜리미터가 포함되지 않도록 처리

 

위험한 형식의 파일 업로드

개요

  • 서버 측에서 실행될 수 있는 스크립트 파일 (asp, jsp, php, sh 파일 등)이 업로드 가능하고, 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우, 시스템 내부 명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있는 보안약점
  • eval() + exec() 

예상 피해

  • 시스템 제어
  • 웹 쉘 (Web Shell) 공격 

 

대응 방법

  • 특정 파일 유형만 허용하도록 화이트리스트 방식으로 파일 유형 제한

  • 파일 크기 및 파일 개수 제한
  • 업로드 된 파일은 웹 루트 폴더 외부에 저장
  • 업로드 되는 파일 이름을 추측할 수 없는 무작위 이름으로 변경하여 저장
  • 업로드 된 파일을 저장하는 경우 최소 권한 부여 및 실행 여부를 확인하여 실행권한 삭제 

 

민감한 데이터

개요

  • 인증정보, 개인정보, 금융정보 등과 같은 민감한 정보를 안전하지 않은 방식으로 저장, 전송하는 경우, 제 3자에게 쉽게 노출, 공유되어 악용될 수 있음 

예상 피해

  • 중요 정보를 저장할 때는 암호화하지 않거나 잘못된 방식으로 암호화하는 경우, 사전 대입 공격, 레인보우 테이블을 이용한 공격 등으로 암호화된 정보를 쉽게 크래킹 할 수 있음
  • 암호화하지 않은 데이터를 안전하지 않은 통신 채널을 통해 주고받는 경우, 스니핑, 중간자 공격 등을 통해 중요 정보를 쉽게 훔쳐보고 유출할 수 있음 

 

스니핑 (Sniffing)

  • 코를 킁킁거리다, 냄새를 맡다
  • 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방의 패킷 교환을 엿듣는 것을 의미 

 

중간자 공격 (MITM, Man In The Middle)

  • 네트워크 통신을 조작하여 통신 내용을 도청하거나 조작하는 공격 기법
  • 통신을 연결하는 두 사람 사이에 중간자가 침입하며, 두 사람은 상대방에게 연결했다고 생각하지만 실제로는 두 사람은 중간자에게 연결되어 있으며 중간자가 한쪽에서 전달된 정보를 도청 및 조작한 후 다른 쪽으로 전달 

 

스푸핑 (Spoofing)

  • "속이다"는 의미
  • 네트워크에서 스푸핑 대상은 MAC 주소, IP 주소, 포트 등 네트워크 통신과 관련된 모든 것
  • 속임을 이용한 공격을 총칭

 

민감한 데이터 처리 기법

  • 민감한 데이터를 저장할 때는 반드시 암호화하여 저장
  • 민감한 데이터를 전송할 때는 안전한 통신 채널을 사용
  • 암호화에 사용하는 알고리즘은 보안성이 검증된 알고리즘을 사용
  • 암호화 알고리즘의 보안 강도를 보장할 수 있는 암호화 키 길이를 사용
  • 일방향 해시함수를 사용할 때는 반드시 솔트를 적용 

 

취약한 암호 알고리즘

개요

  • 중요정보 (금융정보, 개인정보, 인증정보 등)의 기밀성을 보장할 수 없는 취약한 암호화 알고리즘을 사용하여 정보가 노출 가능한 보안 약점
  • RC2 (ARC2), RC4 (ARC4), RC5, RC6, MD4, MD5, SHA1, DES 알고리즘 등
  • Python2 -> PyCrypto 사용
  • Python3 -> PyCryptodimes 사용

예상 피해

  • 금융정보, 개인정보, 인증정보 등의 중요정보 노출 

 

대응 방법

  • 표준화되지 않은 암호화 알고리즘을 사용해서는 안됩니다.
    • 학계 및 업계에서 이미 검증된 표준화된 알고리즘을 사용해야 함
  • 기존에 취약하다고 알려진 암호 알고리즘 (DES, RC5 등)을 대신하여, 안전한 알고리즘 (AES, SEED 등)으로 대체하여 사용해야 합니다.
  • 업무관련 내용, 개인정보 등에 대한 암호 알고리즘 적용 시, 암호모듈시험기관에서 안전성을 확인한 검증필 암호 모듈을 사용해야 합니다. 

 

에러처리

개요

  • 에러를 처리하지 않거나 불충분하게 처리하여 에러 정보에 중요정보 (시스템 내부 정보 등)가 포함될 때, 발생할 수 있는 취약점으로 에러를 부적절하게 처리하여 발생하는 보안약점

종류

  • 오류 메시지 정보 노출
  • 오류상황 대응 부재
  • 부적절한 예외 처리

 

오류 메시지 정보 노출

개요

  • 오류 메시지나 스택 정보에 시스템 내부구조가 포함되어 민감한 정보, 디버깅 정보가 노출 가능한 보안약점
  • 응용프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 외부에 제공하는 경우, 공격자의 악성 행위를 도울 수 있음

예상 피해

  • 예외 발생 시 예외 이름이나 트레이스백 (traceback)를 출력하는 경우, 프로그램 내부 구조를 쉽게 파악할 수 있음 

 

대응 방법

  • 오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함
  • 소스코드에서 예외 상황은 내부적으로 처리하고 사용자에게 시스템 내부 정보 등 민감한 정보를 포함하는 오류를 출력하지 않도록 미리 정의된 메시지를 제공하도록 설정 -> Django 프레임워크에서는 urls.py에 사용자 정의 에러 페이지 핸들러를 정의할 수 있음 

 

오류 상황 대응 부재

개요

  • 시스템 오류 상황을 처리하지 않아 프로그램 실행 정지 등 의도하지 않은 상황이 발생 가능한 보안 약점

⚠️ 예외처리: 코드를 견고하게 만들고 프로그램 중지 등과 같은 잠재적인 오류 방지 가능

예상 피해

  • 오류가 발생할 수 있는 부분을 확인하였으나 이러한 오류에 대하여 예외처리를 하지 않을 겨우, 공격자는 오류 상황을 악용하여 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 할 수 있음 

 

부적절한 예외처리

개요

  • 예외사항을 부적절하게 처리하여 의도하지 않은 상황이 발생 가능한 보안 약점
  • 값을 반환하는 모든 함수의 결과값을 검사하여, 그 값이 의도했던 값이 검사하고, 예외처리를 사용하는 경우에 광범위한 예외 처리 대신 구체적인 예외 처리를 수행해야 함

예상 피해

  • 프로그램 수행 중에 함수의 결과 값에 대한 적절한 처리 또는 예외 상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 야기할 수 있음 

 

로깅

Log (로그)

  • 어떤 소프트웨어가 실행될 때 발생하는 이벤트를 추적하는 수단

로그 5 Level

  • DEBUG: 상세한 정보, 보통 문제를 진단할 때 필요
  • INFO: 예상대로 작동하는 지에 대한 확인
  • WARNING: 예상치 못한 일이 발생했거나 가까운 미래에 발생할 문제에 대한 표시
  • ERROR: 더욱 심각한 문제로 인해 소프트웨어가 일부 기능 수행 X
  • CRITICAL: 심각한 에러, 프로그램 자체가 계속 실행되지 않을 수 있음 

사용 이유

  • 오류의 발생 위치 및 종류 확인
  • 서비스 동작 상태 파악
  • 장애 파악, 알림
  • 로그분석을 통한 서비스 지표 확인, 트랜잭션, 성능파악

로그 작성 주의사항

  • 로그 파일/DB 생명주기&저장소 용량
  • 개인정보 마스킹 등 체크 필요
  • 시스템 주요 정보 (시스템 보안, 계정 정보) 작성 주의 

파이썬 logging 모듈

  • 파이썬에서 로그를 관리해주는 모듈 (파이썬 내장 모듈)
  • 사용법: import logging

logging 모듈의 구성요소

  • Logger: 어플리케이션 코드가 직접 사용할 수 있는 인터페이스 제공
  • Handler: Logger에 의해 만들어진 로그 기록들을 적절한 목적지로 보냄
  • Filter: 출력한 로그 레코드를 결정하기 위한 보다 정밀한 기능 제공
  • Formatter: 로그 레코드의 최종 출력본의 레이아웃을 결정