겉바속촉

[보안] SQL Injection 개념 본문

IT 일기 (상반기)/네트워크 및 시스템 보안

[보안] SQL Injection 개념

겉바속촉 2021. 1. 29. 01:08
728x90
반응형

 

SQL Injection

 

 

웹 서버와 db 서버가 연동되는 웹 서비스 중 사용자의 입력을 받는 화면이 존재

입력받는 문자열에 별도의 처리 없이 db 조회를 위한 sql구문이 사용될 경우

정상적인 sql 구문 인자 값의 변조를 통해 데이터 베이스 접근 및 임의의 sql 쿼리 문을 실행 할 수 있음

 

 

 

 

 

 

1. 위험성

 

가. 사용자 인증을 우회, 정상적인 사용자의 인증권한 획득 가능.

     보통 개발할 때 관리자 즉 admin을 많이 넣어주기 때문에.

 

 

나. 데이터베이스 획득

     의도적으로 DB 에러메시지 유발, DB 구조파악 가능

 

 

다. 관리자 권한 명령 실행

     SQL Query가 내장 프로시저를 이용항 시스템 명령 실행이 가능하다면 --> XPcmd
     관리자 권한 명령을 실행할 수 있는 권한 획득 가능 --> 실질적인 시스템 장악, 시스템의 모든 기능 활용

 

 

 

 

 

 

 

2. 공격기법

 

가. 사용자 로그인 입력 값에 비정상적인 sql query 삽입.

     로그인 인증 창에 공격 문자열을 삽입하여 로그인 우회 공격 시도.

 

 

나. 사용자 입력을 받아 SQL 쿼리 문을 생성할 경우 : 에러 유발 사용

     DB명 확인, 테이블 명, 필드 명 같은 주요 정보 확인

 

 

     DB Schema 파악

         : db_name()을 이용하여 데이터베이스 명 알아냄
           Database의 이름을 문자열로 반환하는 MS-SQL 함수

           결과값 문자열을 정수와 비교연산 하도록 에러 유발

 

 

 

다. SQL에서 기본적으로 제공하는 확장 프로시저 이용

     악성코드 삽입, DB 변경 등 여러 시스템 명령어 실행

 

 

 

 

 

 


 

 

 

 

 

 

SQL Injection 시큐어코딩

 

 

소스코드 레벨에서 Prepared Statement 구문을 통해 SQL Injection 방어

 

  • 개발 단계에서 DAO 객체 또는 DB 연결 구문에서 Prepared Statement 구문 이용
  • SQL Injection 취약점이 근본적으로 발생하지 않는 구조로 웹 사이트를 개발
  • 해당 구문은 SQL 쿼리를 먼저 처리하고 이후 입력되는 변수 값을 항상 문자열 변수로 처리
  • 사용자가 어떤 SQL 구문을 변수에넣어도 SQL문에 영향을 끼칠 수 없음

 

 

 

SQL Injection 보안강화

 

 

 

데이터베이스 운영 레벨에서 방어 대책

 

  • DB 계정에 최소 권한만 부여해주기
  • DB 계정에 system 권한을 부여하면 no  --> sysdba, sa, root 등...
  • MS-SQL Server 라면 xp_cmdshell 등 확장 프로시저를 제거함

 

 

데이터베이스 에러페이지 노출 방지

 

  • Apache의 httpd.conf 전역 설정에 에러 페이지 추가 --> 보통 공통된 에러 페이지로 해주는 것이 good

 

 

 

728x90
반응형