IT/정보보안기사

A01:2021 - 인젝션(Injection): 웹 애플리케이션 보안의 심각한 위협

다파라파라 2024. 8. 5. 13:56

인젝션(Injection)이란 무엇인가?

인젝션(Injection) 공격은 웹 애플리케이션에서 사용자 입력을 처리할 때 발생할 수 있는 취약점 중 하나입니다. 공격자가 신뢰할 수 없는 데이터를 해석하거나 실행하도록 시스템에 주입할 수 있는 경우 발생합니다. 이는 SQL, NoSQL, OS, LDAP 주입 등의 형태로 나타나며, 주로 데이터를 조작하거나 시스템 명령을 실행하여 공격자가 원하는 동작을 수행하게 만듭니다.

인젝션 공격의 위험성

인젝션 공격은 매우 심각한 보안 문제를 야기할 수 있습니다. 공격자는 다음과 같은 행동을 할 수 있습니다:

  • 데이터 유출: 데이터베이스의 민감한 정보를 훔칠 수 있습니다.
  • 데이터 조작: 데이터베이스의 데이터를 변경하거나 삭제할 수 있습니다.
  • 인증 우회: 관리자 권한을 포함한 다른 사용자 계정으로 시스템에 접근할 수 있습니다.
  • 시스템 명령 실행: 서버에서 명령을 실행하여 서버를 장악할 수 있습니다.

이러한 위험성 때문에 인젝션 공격은 OWASP(오픈 웹 애플리케이션 보안 프로젝트) Top 10 리스트에서 항상 높은 순위에 위치합니다. 2021년 OWASP Top 10에서도 인젝션 공격은 가장 심각한 취약점으로 A01에 랭크되었습니다.

인젝션 공격의 유형

  1. SQL 인젝션(SQL Injection)
    • SQL 인젝션은 가장 흔한 인젝션 공격 유형 중 하나로, 공격자가 악성 SQL 구문을 주입하여 데이터베이스를 조작하는 공격입니다. 이를 통해 데이터베이스에서 민감한 정보를 읽어오거나, 데이터를 변경하거나, 삭제할 수 있습니다.
  2. OS 명령 인젝션(OS Command Injection)
    • OS 명령 인젝션은 웹 애플리케이션이 운영 체제 명령을 실행할 때, 공격자가 악성 명령을 주입하여 서버에서 임의의 명령을 실행할 수 있는 공격입니다. 이를 통해 서버를 장악하거나, 추가적인 악성 코드를 실행할 수 있습니다.
  3. NoSQL 인젝션(NoSQL Injection)
    • NoSQL 인젝션은 SQL 인젝션과 유사하지만, NoSQL 데이터베이스를 사용하는 애플리케이션에서 발생합니다. NoSQL 쿼리 구문에 악성 입력을 주입하여 데이터를 조작하거나 유출할 수 있습니다.
  4. LDAP 인젝션(LDAP Injection)
    • LDAP 인젝션은 LDAP(Lightweight Directory Access Protocol) 쿼리에 악성 입력을 주입하여 디렉토리 서비스에서 데이터를 조작하거나 유출하는 공격입니다.

인젝션 공격의 예시

아래는 SQL 인젝션 공격의 간단한 예시입니다. 취약한 코드가 다음과 같다고 가정합니다:

String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";

 

사용자가 입력한 username과 password가 그대로 쿼리에 삽입됩니다. 만약 공격자가 다음과 같은 입력을 제공한다면:

  • username: ' OR '1'='1
  • password: ' OR '1'='1

이 경우, 실제로 실행되는 쿼리는 다음과 같이 됩니다:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1'

이 쿼리는 항상 참을 반환하므로, 공격자는 인증을 우회하여 시스템에 접근할 수 있습니다.

인젝션 공격 예방 방법

  1. 입력 검증(Input Validation)
    • 사용자 입력을 철저히 검증하여 허용되지 않는 문자가 포함되지 않도록 합니다. 입력 값의 길이, 형식 등을 체크하여 유효성을 검증합니다.
  2. 준비된 쿼리(Prepared Statements)
    • SQL 쿼리를 실행할 때 준비된 쿼리 또는 파라미터화된 쿼리를 사용하여, 입력 값이 쿼리 구조를 변경하지 않도록 합니다.
  3. ORM(Object-Relational Mapping) 사용
    • ORM을 사용하여 데이터베이스 쿼리를 자동으로 생성하고 실행하여, 직접 SQL 쿼리를 작성하지 않도록 합니다.
  4. 화이트리스트 사용
    • 입력 값의 허용 가능한 값 목록(화이트리스트)을 정의하고, 그 외의 값은 거부합니다.
  5. 최소 권한 원칙 적용
    • 데이터베이스 사용자 계정에 최소한의 권한만 부여하여, 공격 시 피해를 최소화합니다.

결론

인젝션(Injection) 공격은 웹 애플리케이션 보안에 있어 매우 심각한 위협입니다. 개발자는 인젝션 공격의 위험성을 인식하고, 이를 예방하기 위한 다양한 방법을 적용해야 합니다. OWASP의 권고 사항을 따르고, 철저한 입력 검증과 보안 모범 사례를 준수함으로써 안전한 웹 애플리케이션을 구축할 수 있습니다.

 

 

2021년 OWASP(오픈 웹 애플리케이션 보안 프로젝트) Top 10

728x90
반응형