코딩일기/자격증

[정보처리기사] SQL Injection이란? | 정보처리기사 실기 기출문제

jhy_2023 2024. 10. 14. 12:22
728x90
반응형

2020년 2회 정보처리기사 실기 기출문제

문제

보안의 취약점 중 하나인 SQL Injection이 무엇인지 서술하시오.

정답

- SQL Injection(인젝션) 은 응용 프로그램의 취약점을 이용해 악의적인 SQL 구문을 삽입, 실행하여, 데이터베이스에 접근하거나 데이터를 조작하는 공격 기법입니다.
OR
- 웹프로그램에 SQL 구문을 삽입하여, 서버의 데이터베이스를 공격할 수 있는 공격방식


해설

1. SQL Injection이란?

SQL Injection은 웹 애플리케이션의 보안 취약점을 이용해 공격자가 악의적인 SQL 구문을 삽입함으로써 데이터베이스의 제어권을 얻는 공격 기법입니다. 공격자는 이를 통해 비밀 정보를 탈취하거나, 데이터를 변경 또는 삭제하는 등의 악의적인 행위를 할 수 있습니다.

SQL Injection 공격은 다음과 같은 절차로 이루어집니다:

  1. 취약점 발견: 공격자는 사용자가 입력한 데이터가 SQL 쿼리에 그대로 포함되는지 탐색합니다.
  2. 악의적인 SQL 구문 삽입: 공격자는 이 취약점을 이용하여 데이터베이스 쿼리에 악의적인 SQL 명령을 삽입합니다.
  3. 데이터베이스 제어: 공격자가 의도한 대로 쿼리가 실행되면, 데이터베이스의 민감한 데이터에 접근하거나, 데이터베이스를 조작하는 것이 가능합니다.

2. SQL Injection 예시

1. 로그인 우회 공격

웹 애플리케이션에서 로그인 기능을 제공하는 코드가 있다고 가정합니다. 이때, 사용자가 입력한 username과 password는 데이터베이스에서 검증되기 위해 다음과 같은 SQL 쿼리가 실행될 수 있습니다:

SELECT * FROM users WHERE username = '사용자입력' AND password = '사용자입력';

만약 사용자가 admin' --를 username 입력란에 입력하면, 쿼리는 다음과 같이 변형됩니다:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = '아무거나';

여기서 --는 SQL에서 주석을 의미하므로, 뒤에 오는 부분은 무시됩니다. 결과적으로 쿼리는 다음과 같은 형태가 되며, 비밀번호 검증 없이 admin 계정으로 로그인할 수 있게 됩니다:

SELECT * FROM users WHERE username = 'admin';

2. 데이터베이스 정보 탈취

공격자는 SQL Injection을 이용하여 데이터베이스의 민감한 정보에 접근할 수 있습니다. 예를 들어, 다음과 같은 SQL 구문이 있다고 가정해 봅시다:

SELECT * FROM users WHERE username = '사용자입력';

공격자가 여기에 악의적인 SQL을 주입하여 admin' OR '1' = '1이라고 입력하면, SQL 구문은 다음과 같이 변형됩니다:

SELECT * FROM users WHERE username = 'admin' OR '1' = '1';

'1' = '1'은 항상 참이므로, 이 쿼리는 모든 사용자 정보를 반환하게 되어 데이터베이스의 민감한 정보를 노출시킬 수 있습니다.


3. 문제 해설

SQL Injection은 웹 애플리케이션의 보안 취약점을 악용하여 데이터베이스에 악의적인 SQL 구문을 삽입, 실행함으로써 데이터베이스의 제어 권한을 탈취하는 공격 기법입니다. 이 문제는 응용 프로그램에서 사용자 입력을 안전하게 처리하지 못할 때 발생하며, 공격자는 이를 통해 데이터 조회, 수정, 삭제, 관리자 계정 획득 등 심각한 보안 위협을 발생시킬 수 있습니다.

728x90
반응형