close

[IT열쇳말] SQL 인젝션

가 +
가 -

| SQL 인젝션은 사용자 입력값에 필터링이 제대로 적용되지 않을 때 발생한다. <출처: 펜타시큐리티 블로그>

2017년 3월, 고객정보 유출 사건이 발생했다. 숙박 O2O 서비스 ‘여기어때’를 이용한 고객에게 불쾌한 내용을 담은 문자메시지가 3월24일 전후로 발송됐다. 문자메시지를 받은 것으로 확인된 고객 수만 4천여명에 이른다.

며칠 뒤인 3월30일, 최종적으로 여기어때에서 고객 91만명의 정보가 유출된 것으로 나타났다. 해킹으로 이용자명, 휴대폰 번호, 숙박 이용정보 등 고객 정보 323만건이 유출됐다. 해커는 다양한 공격 시도를 한 것으로 알려졌다. 그 가운데 SQL 인젝션(SQL Injection) 공격 흔적이 발견됐다.

여기어때 측은 “SQL 인젝션 방식으로 자사 데이터베이스(DB)가 뚫렸다는 것은 사실이 아니다”라고 선을 그으면서도 “SQL 공격 흔적이 있을 뿐, 다양한 방식의 해킹 시도가 있었기에 이 점을 관계 당국이 수사 중”이라고 밝혀 SQL 인젝션 공격 가능성을 완전히 무시하지는 않았다.

여기어때가 어떤 경로로 사용자 정보를 유출했는지는 조사로 따로 밝힐 문제다. 다만, 유출 가능성으로 거론되는 SQL 인젝션 공격은 해커가 정보를 탈취할 때 사용하는 가장 흔한 공격 방식 중 하나다.

글로벌 콘텐츠 전송 서비스 기업 씨디네트웍스가 발표한 ‘2016년 4분기 웹 공격 분석 보고서’에 따르면, 2016년 4분기 웹 공격 취약점 유형은 사이트 간 요청 위조 공격 기법인 CSRF(Cross-Site Request Forgery)가 28%, SQL 인젝션이 26%로 나타날 정도로 흔하다.

| 씨디네트웍스가 발표한 2016년 4분기 웹 공격 분석 보고서에 따르면, SQL 인젝션이 웹 공격 4건 중 1건에 이를 정도로 흔한 것으로 나타났다. <출처: 씨디네트웍스>

가장 흔한 웹 해킹 공격법

‘SQL인젝션’은 웹 애플리케이션 사용자 입력값에 필터링이 제대로 적용돼 있지 않을 때 발생한다. 공격자가 조작된 SQL 질의문을 삽입해 웹서버 DB 정보를 열람하고 정보를 유출·조작한다.

SQL 인젝션을 이해하려면 우선 SQL(Structured Query Language)이 무엇인지 알고 넘어가야 한다. SQL은 데이터베이스(DB)를 만들고 유지하는 데 사용하는 프로그래밍 언어 중 하나다. DB를 구축하고 조작하기 위해 사용하는 일종의 명령어인 셈이다. SQL을 이용하면 데이터를 정의, 조작, 제어할 수 있다.

SQL 인젝션은 웹사이트 취약점을 찾아, DB를 관리하는 SQL 명령어에 악성코드를 삽입해 해커가 원하는 식으로 조작하는 웹 해킹 공격 중 하나다. 개발자가 의도하지 않은 SQL 명령을 실행해 DB를 비정상적으로 조작한다. 이런 식으로 개발자 모르게 DB에 저장한 정보를 유출할 수 있다.

| SQL 공격 방법 <출처: 안랩 블로그>

에러 기반 공격 vs 블라인드 공격

SQL인젝션 공격은 대표적으로 DB를 공격해서 정보를 탈취하는 방식이다. 어떤 웹사이트가 있다. 관리자 아이디가 ‘관리자임’이고, 비밀번호는 ‘보안’으로 설정했다. 원래는 이 관리자 아이디와 비밀번호를 제대로 입력해야 해당 웹사이트 DB에 접속해 정보를 볼 수 있다.

SQL 인젝션은 관리자 비밀번호를 제대로 입력하지 않고, 해커가 임의로 여러 문자 조합을 이용해 DB에 접속해 비밀번호를 볼 수 있게 도와준다. 아이디로 ‘관리자임’을 넣고, 비밀번호로 ‘보안일까 아닐까’를 입력해 DB에 접근해 정보를 탈취한다.

구글 검색을 통해 공격 대상 웹사이트에 추가적인 문자열을 입력해서 웹사이트 접속 오류를 유도한 다음, 해당 웹사이트 관리자 모드로 들어가거나 내부 정보를 빼오는 수법도 있다. 만약 공격자가 DB 시스템에서 시스템 명령어를 실행할 수 있도록 설정해 놓았을 경우엔 해당 웹사이트 DB에서 시스템 명령어도 실행할 수 있다.

| SQL 인젝션 공격 방법 <출처: 나우콤>

좀 더 자세히 나눠보면 SQL 인젝션 공격은 크게 에러 기반 공격(Error-Based Attacks)과 블라인드 공격(Blind Attacks)으로 나뉜다.

에러 기반 공격은 해커가 검사하지 않은 입력값을 발견하고, 이를 악용할 때 발생하는 공격이다. 검사 입력값은 입력한 데이터 중에서 불필요한 부분을 제거하는데, 해커는 잘못된 정보를 입력하고 피드백을 기다리기만 하면 그 정보를 가로채는 식이다.

블라인드 공격은 에러 기반 공격과 달리 DB 서버 에러 메시지를 이용하지 않고 바로 DB를 공격한다. 이 공격은 DB 취약점을 노리고 공격하는 기법보다 성공하기 어렵긴 하지만, 꾸준히 발생하는 공격 중 하나다.

웹 방화벽 도입으로 막을 수 있어

SQL 인젝션 공격을 방지하려면 주기적으로 웹사이트 보안을 점검하고 관리자 계정을 관리하는 게 필수다. 무엇보다 안전한 웹사이트를 설계하고 구현하는 작업이 필요하다. 입력값마다 적절한 검증 절차를 적용하고 위험한 입력값은 위험하지 않은 값으로 치환하고 입력값이 허용범위 내에 있는지 검사하면 SQL 인젝션 공격을 막을 수 있다.

웹 방화벽(WAF)을 이용하는 것도 도움이 된다. 웹 방화벽은 관리자가 설정한 규칙에 따라 의심스러운 웹 트래픽 등을 감지하고 탐지하기 때문에 SQL 인젝션 공격이 발생하는 것을 예방하는 데 도움이 된다.

| 웹 방화벽 설계로 SQL 인젝션 공격을 막을 수 있다. <출처: 펜타시큐리티 블로그>

DB 계정에 접근하는 계정 권한을 축소하는 것도 방법이 될 수 있다. 웹사이트 안에 저장된 데이터 자체 접근 경로를 줄이면, 피해 가능성도 함께 줄일 수 있다. 특히 승인받지 않은 사용자가 관리자 권한에 접근하는 걸 막는 데 도움이 된다.

동시에 DB 에러 메시지를 노출하지 않는 것도 중요하다. 상당수 SQL 인젝션 공격이 에러 메시지를 이용해 DB를 공격하고, 이 과정에서 중요한 데이터가 노출된다. 이런 웹 보안 취약점이 있는지 주기적으로 점검하고 살피는 작업이 필요하다.

※ 참고 링크

이 글은 ‘네이버캐스트→테크놀로지월드→용어로 보는 IT’에도 게재됐습니다. ☞‘네이버캐스트’ 보기

네티즌의견(총 0개)