FrontEnd Roadmap 04 - 인터넷 파트4: Web Security 1: OWASP

SANGHYUN KIM·2025년 1월 5일
0

frontend-roadmap

목록 보기
4/9

OWASP TOP 10(2021)

OWASP는 웹 애플리케이션에서 중요한 취약점을 식별하고 순위를 매기는 기관이다.
해당 사이트에서는 주기적으로 상위 10개의 취약점을 팔요하며, 해당 목록을 보면서 취약점들을 보고 예방법을 나열해본다.

각 항목의 예시와 예측방법 일부분만 발췌를 했고 예방법에 대한 상세 방법은 cheat sheet 참조

  • A01:2021-취약한 접근 제어(Broken Access Control)
    • 적절한 접근 제어가 부재하거나 잘못 구성되어, 권한이 없는 사용자가 민감한 데이터에 접근하거나 기능을 수행할 수 있는 취약점
    • 예시:
      • 다른 사용자 계정을 조회하고 수정하는 행위
      • 특정 유저의 권한 격상. 로그인 하지 않고 유저 역할 또는 관리자 역할로 격상되는 행동
      • CORS 설정이 잘못 되어있어 다른 출처로부터의 접근 허용
    • 예방법: 접근 제어는 공격자가 접근 제어 검사 또는 메타데이터를 수정할 수 없는 신뢰할 수 있는 서버 측 코드 또는 서버리스 API에서만 효과적
      • public resource를 제외하고 기본적으로 접근 거절로 설정
      • 접근 제어 실패를 기록하고 적절한 경우 관리자에게 알람 설정
  • A02:2021-암호화 실패(Cryptographic Failures)
    • 민감한 데이터의 보호를 위한 암호화가 부적절하거나 부재하여 데이터 노출이나 시스템 손상이 발생할 수 있는 취약점
    • 예시:
      • 오래되거나 취약한 암호화 알고리즘 또는 프로토콜 사용
      • HTTP, SMTP, FTP 통신 시 암호화되지 않은 평문 데이터(clear text)
    • 예방법:
      • 저장되는 중요 데이터들은 모두 암호화 처리
      • 레거시 프로토콜 사용 지양
      • 단순 암호화보다 인증된 암호화를 사용
        • 인증된 암호화 VS (단순)암호화(출처1, 출처2)
          특징단순 암호화(Encryption)인증된 암호화(Authenticated Encryption)
          기밀성(Confidentiality)
          무결성(Integrity)
          출처 신뢰(Identification)
          변조 탐지
          • 단순 암호화는 데이터를 암호화 시키지만 인증화(Authentication)은 사용자의 정보 인증까지 같이 해주기에 해당 데이터가 도중에 변형되지 않았고 원하는 상대방으로부터 받은 지 확인할 수 있음
  • A03:2021-인젝션(Injection):
    • SQL, NoSQL, OS 명령어 등 외부 입력이 제대로 검증되지 않아 코드나 쿼리에 삽입되어 실행되는 취약점
    • 예시:
      • 유저가 제공한 데이터를 검증, 필터링, sanitze하지 않음
    • 예방법:
      • 데이터와 명령어를 분리
        const userId = '123 OR 1=1';
        const query = `SELECT * FROM customers WHERE id = ${userId}`;
        // query문 전체로 인식
        // SELECT * FROM customers WHERE id = 123 OR 1=1 로 인식
        
        const userId = '123 OR 1=1'; // 악의적인 입력
        const query = 'SELECT * FROM customers WHERE id = ?'; // 명령어는 고정
        database.execute(query, [userId]); // 데이터는 별도로 전달
        // query가 문자열처리가 되어서 정확한 값을 요구하는 형태로 전달
        // SELECT * FROM customers WHERE id = '123 OR 1=1'로 인식
        
  • A04:2021-안전하지 않은 설계(Insecure Design)
    • 보안 고려 없이 설계된 시스템으로 인해 발생하는 취약점으로, 위협 모델링이나 보안 패턴의 부재로 인해 발생
    • 예시:
      • bot에 대한 대책이 없는 디자인
    • 예방법:
      • 단위 또는 통합 테스트를 작성하여 중요한 로직이 위협에 내성이 있는 지 테스트
      • 안전한 디자인 패턴을 사용하는 라이브러리를 사용하거나 구축
  • A05:2021-보안 설정 오류(Security Misconfiguration)
    • 안전하지 않은 기본 설정, 불필요한 기능 활성화, 잘못된 권한 설정 등으로 인해 발생하는 취약점
    • 예시:
      • 불필요한 기능이 활성 또는 설치(포트, 페이지, 계정)
      • 최신 보안 패치가 적용되지 않거나 제대로 설정이 되지 않은 상황
      • 애플리케이션 또는 서버에서 보안값 설정 누락
    • 예방법:
      • 불필요한 기능 제거(포트, 페이지, 계정)
      • 클라이언트에서 전송 시 security header 설정
        • Content-Security-Policy (CSP): 스크립트 출처를 제한.
        • X-Frame-Options: 클릭재킹(clickjacking) 방지.
  • A06:2021-취약하거나 오래된 컴포넌트(Vulnerable and Outdated Components)
    • 알려진 취약점이 있는 라이브러리나 프레임워크를 사용하는 경우 발생하는 취약점
    • 예시:
      • 서버 또는 클라이언트에서 사용되는 컴포넌트들의 버전이 낮은 상황
      • 구성요소(라이브러리) 간의 호환성을 테스트하지 않는 경우
    • 예방법:
      • 사용하지 않는 구성요소들 제거
      • 주기적으로 사용하는 컴포넌트들의 버전 체크
      • 안전한 링크를 통해 공식 사이트에서 얻은 컴포넌트
  • A07:2021-식별 및 인증 실패(Identification and Authentication Failures)
    • 사용자 인증 및 세션 관리의 실패로 인해 발생하는 취약점
    • 예시:
      • 약하면서 잘 알려진 암호 허용(Password1, admin 등등)
      • 없거나 효과 없는 multi-factor 인증
      • 유저 세션 정보를 URL에 포함하는 행위
    • 예방법:
      • 안전하고 효과적인 multi-factor 인증 도입
      • 암호 체크리스트를 이용하여 약한 암호들 검증
      • 실패한 로그인 시도를 제한 또는 지연
  • A08:2021-소프트웨어 및 데이터 무결성 실패(Software and Data Integrity Failures)
    • 소프트웨어 업데이트, 중요 데이터, CI/CD 파이프라인의 무결성을 검증하지 않아 발생하는 취약점
    • 예시:
      • 신뢰하지 못할 출처, 저장소, CDN에 있는 플러그인, 라이브러리, 모듈에 의존하는 애플리게이션
      • 자동 업데이트. 자동 업데이트로 인하여 프로젝트의 무결성을 확인하지 않기 때문에.
    • 예방법:
      • 디지털 서명 또는 비슷한 방식으로 소프트웨어나 데이터의 신뢰성 검증
      • 신뢰할만한 저장소에서 라이브러리 사용
      • 리뷰 절차를 도입하여 악의적인 코드 또는 취약점을 점검
  • A09:2021-보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures)
    • 보안 이벤트에 대한 로깅과 모니터링이 부족하여 공격을 탐지하지 못하는 취약점
    • 예시:
      • 로그인, 로그인 실패, 고가치 통신을 기록하지 않음
      • 의심스러운 활동을 모니터링 또는 기록하지 않음
      • 실시간 공격에 대해서 감지 또는 알림
    • 예방법:
      • 로그인, 서버 검증 실패, 접근 시도, 의심스러운 활동을 기록
      • 로그 관리 솔루션에서 쉽게 사용할 수 있도록 로그 생성
      • DevSecOps 팀을 구성하여 의심스러운 활동이 감지되면 신속하게 대응할 수 있는 모니터링 및 알림 구축
  • A10:2021-서버 측 요청 위조(Server-Side Request Forgery, SSRF)
    • 서버가 외부 자원을 요청할 때 사용자 입력을 검증하지 않아 발생하는 취약점
    • 예시:
      • 유저가 입력한 URL을 검증하지 않고 remote resource fetching
    • 예방법:
      • 서버작업
        • SSRF의 영향을 줄이기 위해 remote resource의 접근을 별도의 네트워크 세그먼트로 분리
      • 애플리케이션 작업
        • input data를 검증(validation) 및 sanitize
        • HTTP redirection 방지
        • (URL consistency)애플리케이션이 요청하는 URL과 해당 IP 주소가 일관되게 유지되도록 주의.
          • 예를 들어, DNS Rebinding과 같은 공격은 URL과 IP 매핑의 일관성을 깨뜨려 악의적인 리소스에 접근하게 할 수 있음
            • DNS Rebinding이란?
              • 공격자가 외부 URL을 입력해 초기 요청은 합법적인 도메인(IP 주소)으로 전송.
              • 이후 공격자가 DNS Rebinding을 통해 내부 네트워크 자원(예: 192.168.1.1)에 접근.

만약 각 항목에서 프론트엔드 또는 서버가 할 수 있는 것이 궁금하다면 [Velog-hongchee.log]OWASP TOP10 취약점글을 확인해보면 좋다.

profile
꾸준히 공부하자

0개의 댓글