코딩일기/자격증

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

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

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

문제

SQL Injection이 무엇인지 서술하시오.

정답

SQL Injection은 응용 프로그램의 취약점을 이용해 악의적인 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
반응형