제퍼넷 로고

SQL 주입: 데이터베이스에 숨어 있는 사이버 공격

시간

개요

SQL 인젝션은 악의적인 사용자가 임의의 SQL 코드를 웹 애플리케이션의 쿼리에 삽입하여 데이터베이스에 대한 액세스를 허용하는 공격입니다. 이를 사용하여 중요한 정보를 훔치거나 데이터베이스에 저장된 데이터를 무단으로 변경할 수 있습니다. 사용자 입력이 SQL 쿼리, 공격자가 실행하는 악성 코드를 삽입할 수 있습니다. 데이터베이스 관리 시스템.

출처: Avast.com

웹 애플리케이션의 보안과 이들이 저장하는 민감한 데이터를 지속적으로 위협하기 때문에 오늘날 SQL 인젝션 공격을 연구하는 것은 필수적입니다. 수년 동안 잘 알려진 문제임에도 불구하고 개발자가 위험을 충분히 인식하지 못하거나 응용 프로그램을 보호하는 데 필요한 조치를 취하지 않을 수 있기 때문에 공격이 계속 성공하고 있습니다. 또한 기술과 웹 애플리케이션의 사용이 계속 발전함에 따라 새로운 공격 기회가 생길 수 있습니다. 예를 들어, 클라우드 기반 서비스 및 마이크로서비스의 사용이 증가함에 따라 보안이 필요한 새로운 공격 표면이 생성될 수 있습니다. 또한, 지속적인 성장을 통해 사물의 인터넷 IOT () 디바이스와 연결된 디바이스의 확산은 공격 표면을 증가시켜 SQL 인젝션을 더욱 시급한 문제로 만듭니다. 기술에 대한 의존도가 높아짐에 따라 조직이 위험을 인식하고 그러한 공격으로부터 보호하는 데 필요한 지식과 도구를 갖추는 것이 중요합니다.

SQL 주입출처: www.linkedin.com

학습 목표:

다음은 해당 문서의 주요 학습 목표입니다.

1. SQL 인젝션이 무엇이고 어떻게 작동하는지 배우게 됩니다.
2. SQL 인젝션의 유형과 실제 세계에 미치는 영향에 대해 배웁니다.
3. Yahoo 및 Linkedin과 같은 거대 기술 대기업이 SQL 삽입을 신중하게 수행하지 않아 수백만 달러를 잃는 실제 시나리오에 대해 논의하십시오.
4. 몇 가지 코드 예제를 살펴보고 SQL 인젝션의 실제 데모를 확인하십시오.

차례

1. SQL 인젝션 공격의 파괴적인 결과

2. 검증된 SQL 주입 방지 방법

3. 다양한 형태의 SQL 주입 공격

4. 화제가 된 다양한 SQL 인젝션 공격

5. SQL 인젝션 코드 예제

6. 결론

SQL 인젝션 공격의 파괴적인 결과

SQL 주입 공격은 웹 애플리케이션의 보안 및 무결성과 여기에 저장되는 민감한 데이터에 심각한 결과를 초래할 수 있습니다. 성공적인 SQL 삽입 공격의 영향은 다음과 같습니다.

  1. 데이터 도용: 공격자는 SQL 삽입을 사용하여 고객 이름, 주소, 신용 카드 정보와 같은 중요한 데이터에 대한 무단 액세스 권한을 얻고 유출할 수 있습니다.
  2. 데이터 손상: 공격자는 SQL 주입을 사용하여 데이터베이스에 저장된 데이터를 수정하거나 삭제하여 애플리케이션을 손상시키고 잠재적으로 비즈니스 운영을 방해할 수 있습니다.
  3. 서버 손상: 성공적인 SQL 주입 공격은 공격자에게 서버에서 임의의 코드를 실행할 수 있는 능력을 제공하여 잠재적으로 기본 시스템을 제어하고 네트워크의 다른 리소스에 액세스할 수 있도록 합니다.
  4. 서비스 거부 (DoS) : 공격자는 SQL 주입을 사용하여 데이터베이스 또는 웹 애플리케이션에 과부하를 일으켜 충돌을 일으키거나 사용할 수 없게 만들 수 있습니다.
  5. 준수 위반: SQL 인젝션 공격은 데이터 침해로 이어질 수 있으며, 이는 중요한 정보를 보호하기 위한 규정 및 업계 표준을 위반하고 조직에 상당한 재정적 및 평판 손상을 초래할 수 있습니다.

SQL 인젝션 공격의 잠재적 영향을 이해하고 우선순위를 정하고 이를 방지, 감지 및 대응하는 데 필요한 리소스에 투자하는 것이 중요합니다.

SQL 주입
출처: slideplayer.com

SQL 인젝션 방지를 위한 검증된 방법

출처: www.cloudbric.com

이러한 보안 조치와 기타 보안 조치를 구현함으로써 조직은 SQL 삽입 공격으로부터 웹 애플리케이션과 데이터베이스를 효과적으로 보호할 수 있습니다.

  1. 입력 검증: 모든 사용자 입력이 올바른 유형 및 형식인지 확인하고 이러한 기준을 충족하지 않는 모든 입력을 거부합니다.
  2. 매개변수화된 쿼리: 준비된 문, 매개 변수가 있는 쿼리 또는 저장 프로시저를 사용하여 사용자 입력을 쿼리 문자열에 연결하는 대신 쿼리 명령에서 사용자 입력을 분리합니다.
  3. 이스케이프 특수 문자: 작은따옴표 및 세미콜론과 같은 악의적인 SQL 코드를 삽입하는 데 사용할 수 있는 사용자 입력의 특수 문자를 이스케이프합니다.
  4. 사용자 권한 제한: 웹 애플리케이션과 관련된 데이터베이스 사용자의 권한을 의도된 기능을 수행하는 데 필요한 최소한으로 제한합니다.
  5. ORM 사용: ORM(Object-Relational Mapping) 프레임워크를 사용합니다. 데이터베이스 작업을 추상화하고 사용자 입력을 자동으로 이스케이프 처리합니다.
  6. 정기적인 모니터링 및 검사: SQL 삽입 시도 및 비정상적인 활동의 징후가 있는지 웹 애플리케이션 및 관련 데이터베이스를 모니터링하고 검사합니다.
  7. 웹 애플리케이션 방화벽(WAF) 사용: 웹 애플리케이션 보안을 위한 WAF는 악성 SQL 코드가 애플리케이션에 도달하기 전에 식별하고 차단하여 공격으로부터 보호할 수 있습니다.
  8. 소프트웨어 업데이트 유지: 최신 보안 패치 및 업데이트를 통해 웹, 웹 서버 및 데이터베이스 관리 시스템을 포함한 모든 소프트웨어 구성 요소를 최신 상태로 유지하십시오.

다양한 형태의 SQL 삽입 공격

공격자가 애플리케이션의 취약성을 악용하려고 시도할 수 있는 다양한 방법을 인식하고 이를 방지하기 위해 필요한 조치를 취하려면 다양한 유형의 공격을 이해하는 것이 중요합니다.

  1. 클래식 SQL 삽입: 이 공격에는 로그인 양식과 같은 입력 필드에 악성 SQL 코드를 삽입하여 데이터베이스에 대한 무단 액세스 권한을 얻는 것이 포함됩니다.
  2. 블라인드 SQL 인젝션: 이러한 유형의 공격은 공격자가 삽입된 SQL 코드의 결과를 볼 수 없지만 애플리케이션이 데이터베이스의 구조 또는 내용에 대한 정보를 드러내는 방식으로 응답하도록 할 수 있는 경우에 사용됩니다.
  3. 시간 기반 SQL 주입: 이 공격에는 애플리케이션의 응답을 지연시키는 SQL 코드를 주입하는 것이 포함되며, 이는 데이터베이스에 대한 정보를 추론하는 데 사용될 수 있습니다.
  4. 오류 기반 SQL 주입: 이러한 유형의 공격은 삽입된 SQL 코드에 대한 응답으로 애플리케이션에서 생성된 오류 또는 메시지를 이용하여 데이터베이스에 대한 정보를 노출할 수 있습니다.
  5. 인밴드 SQL 삽입: 이 공격은 데이터 주입 및 추출에 동일한 채널을 사용합니다.
  6. 대역 외 SQL 삽입: 이 공격은 데이터 추출을 위해 일반적으로 DNS 또는 HTTP 요청과 같은 다른 채널을 사용합니다.
  7. 유니온 기반 SQL 인젝션: 이 공격은 주입된 SQL 코드의 결과를 적법한 쿼리와 결합하기 위해 UNION 연산자를 사용하여 데이터베이스에서 데이터를 추출하는 데 사용됩니다.
  8. 추론 SQL 주입: 이러한 유형의 공격은 응용 프로그램의 응답 시간을 사용하여 데이터베이스의 구조 또는 콘텐츠에 대한 정보를 추론합니다.
유형

헤드라인을 장식한 역사상의 다양한 공격

실제 SQL 인젝션 공격으로 피해를 입은 조직에 재무적 손실을 입힌 사례

  • 대상 기업: 2013년 미국의 대기업인 Target Corporation은 SQL 주입 공격으로 인해 데이터 손실을 입었습니다. 이 공격으로 인해 40천만 명이 넘는 고객의 신용 카드 번호 및 개인 데이터와 같은 민감한 정보가 도난당했습니다. 공격자는 소매업체의 POS 시스템의 취약점을 악용하여 Target의 네트워크에 액세스할 수 있습니다. 네트워크 내부에 들어가면 공격자는 SQL 주입 공격을 사용하여 고객 데이터를 훔칠 수 있습니다. 이 사건으로 인해 Target은 막대한 재정적 손실을 입었고 회사의 명성도 실추되었습니다. 이 공격으로 인해 데이터 보안 및 위반 알림에 대한 규정과 법률이 더욱 엄격해지고 SQL 삽입 공격으로부터 보호하는 데 다시 집중하게 되었습니다.
  • 야후!: 또 다른 다국적 기업인 야후(Yahoo)도 2013년 SQL 인젝션 공격으로 유사한 데이터 유출을 겪었습니다. 공격자는 이메일 주소, 전화번호, 생년월일과 같은 3억 개가 넘는 민감한 정보에 무단으로 접근할 수 있었습니다. 야후 사용자 계정. 공격자는 데이터를 훔치기 위해 SQL 인젝션을 사용하여 회사의 맞춤형 소프트웨어 취약점을 악용했습니다. 이 사건으로 인해 야후는 막대한 재정적 손실을 입었고 회사의 명성도 실추되었습니다. 이 공격은 SQL 인젝션 공격에 대한 보호의 중요성과 중요한 데이터를 보호하기 위한 더 강력한 보안 조치의 필요성에 대한 관심을 불러일으켰습니다. 공격 후 Yahoo는 시스템을 보호하고 보안 관행을 개선하기 위해 몇 가지 조치를 취했으며 영향을 받은 사용자에게 알림을 제공했습니다.
  • 소니 : Sony의 경우 공격자는 77만 명이 넘는 Sony Playstation Network 및 Qriocity 사용자의 개인 데이터 및 로그인 자격 증명과 같은 민감한 정보에 대한 무단 액세스 권한을 얻을 수 있었습니다. 공격자는 데이터를 훔치기 위해 SQL 인젝션을 사용하여 회사 네트워크의 취약점을 악용할 수 있었습니다. 이 사건으로 인해 Sony는 막대한 재정적 손실을 입었고 회사의 명성도 실추되었습니다. Sony는 이 문제를 해결하기 위해 PlayStation Network를 한 달 동안 중단해야 했으며, 이로 인해 수익과 고객 신뢰를 잃었습니다. 이 공격은 SQL 인젝션 공격에 대한 보호의 중요성과 중요한 데이터를 보호하기 위한 더 강력한 보안 조치의 필요성에 대한 관심을 불러일으켰습니다. 공격 후 Sony는 시스템을 보호하고 보안 관행을 개선하기 위해 몇 가지 조치를 취했으며 영향을 받는 사용자에게 알림 및 무료 서비스도 제공했습니다.
  • 링크드 : 공격자는 167억 XNUMX만 개가 넘는 이메일 주소 및 해시된 비밀번호와 같은 민감한 정보에 대한 무단 액세스 권한을 얻을 수 있었습니다. 링크드인 사용자. 공격자는 데이터를 훔치기 위해 SQL 인젝션을 사용하여 회사 시스템의 취약점을 악용할 수 있었습니다. 이 사건으로 인해 LinkedIn은 막대한 재정적 손실을 입었고 회사 평판도 실추되었습니다. 이 공격은 SQL 인젝션 공격에 대한 보호의 중요성과 중요한 데이터를 보호하기 위한 더 강력한 보안 조치의 필요성에 대한 관심을 불러일으켰습니다. 공격 후 LinkedIn은 시스템을 보호하고 보안 관행을 개선하기 위해 몇 가지 조치를 취했으며 영향을 받는 사용자에게 알림 및 무료 서비스도 제공했습니다. 훔친 데이터는 나중에 다크 웹에서 판매되는 것으로 밝혀져 암호 보안의 중요성을 강조하고 사용자에게 고유하고 강력한 암호를 사용하도록 권장했습니다.

SQL 인젝션 코드 예제

이 섹션에서는 SQL 주입의 기본 예제를 살펴봅니다.

1. 클래식 SQL 인젝션: 항상 true 문을 반환하도록 SQL 쿼리를 조작하여 로그인 인증을 우회하는 데 사용됩니다. 위의 입력 필드에 제공한 예인 admin' OR '1'='1은 SQL 쿼리를 SELECT * FROM users WHERE username='admin' OR '1'='1′ AND password='{password_entered}로 변경합니다. .' 이렇게 하면 항상 true 문이 반환되고 공격자가 관리자로 로그인할 수 있습니다.

예: 입력: ' OR '1'='1 SQL 쿼리: SELECT * FROM users WHERE username='' OR '1'='1' AND password='{password_entered}'

2. 유니온 기반 SQL 인젝션: 원래 쿼리에 추가 SQL 쿼리를 추가하여 데이터베이스에서 데이터를 추출합니다.

예 : 입력 : ' UNION SELECT 1,2,username,4,password FROM users WHERE '1'='1 SQL 쿼리 : SELECT * FROM users WHERE username='' UNION SELECT 1,2,username,4,password FROM users 여기서 '1'='1'

3. 오류 기반 SQL 인젝션: 데이터베이스에서 데이터를 추출하여 응용 프로그램이 기본 데이터베이스에 대한 정보를 나타내는 오류 메시지를 반환하도록 합니다.

예: 입력: ' OR 1=1 -- SQL 쿼리: SELECT * FROM users WHERE username='' OR 1=1 --'

4. 블라인드 SQL 인젝션: 응용 프로그램이 오류 메시지를 반환하지 않을 때 사용되지만 공격자는 응용 프로그램이 원하는 정보에 따라 다르게 응답하도록 하는 요청을 전송하여 정보를 추출할 수 있습니다.

예 : 입력 : admin' AND (SELECT COUNT(*) FROM information_schema.tables) = 0 -- SQL 쿼리 : SELECT * FROM users WHERE username='admin' AND (SELECT COUNT(*) FROM information_schema.tables) = 0 - -'

5. 시간 기반 SQL 인젝션: 이 유형의 SQL 삽입은 공격자가 정보를 추출할 수 있을 때 사용되어 애플리케이션이 원하는 정보를 기반으로 응답을 지연시킵니다.

예: 입력: admin' AND (SELECT IF(SUBSTR((SELECT password FROM users WHERE username='admin'),1,1)='a', SLEEP(5), 0))=0 -- SQL 쿼리: SELECT * FROM users WHERE username='admin' AND (SELECT IF(SUBSTR((SELECT password FROM users WHERE username='admin'),1,1)='a', SLEEP(5), 0))=0 - -'

결론

결론적으로 SQL 인젝션은 공격자가 인증을 우회하고 중요한 데이터를 추출하고 대상 데이터베이스에서 악성 코드를 실행할 수 있도록 하는 중요한 보안 취약점입니다. 공격자가 로그인 양식과 같은 입력 필드에 악성 코드를 삽입할 때 발생합니다. 그러면 데이터베이스가 이를 실행합니다. 여러 유형의 SQL 주입 공격에는 클래식, 통합 기반, 오류 기반, 블라인드 및 시간 기반이 포함됩니다. 이러한 공격은 데이터 유출 및 중요한 정보 손실을 포함하여 조직에 심각한 영향을 미칠 수 있습니다.

이 기사의 주요 내용:
1. SQL 인젝션이 무엇이며 이 기술을 알아야 하는 이유에 대해 논의했습니다.
2. 입력 유효성 검사, 사용자 입력을 제한하는 매개변수화된 쿼리 등과 같은 영향과 이를 방지하는 방법을 이해합니다.
3. 또한 오류 기반, 시간 기반, 통합 기반 등과 같은 몇 가지 유형의 SQL 삽입에 대해 논의했습니다. 그런 다음 Linkedin, Yahoo 등과 같은 대기업의 실제 사례에 대해 논의했습니다.
4. 몇 가지 기본 코드와 명령을 배우고 기사를 마무리했습니다.

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

spot_img

최신 인텔리전스

spot_img