코더는 보안을 정복 : 공유 및 학습 시리즈 - NoSQL 주입

게시일: 2018년 12월 20일
by Jaap Karan Singh
사례 연구

코더는 보안을 정복 : 공유 및 학습 시리즈 - NoSQL 주입

게시일: 2018년 12월 20일
by Jaap Karan Singh
리소스 보기
리소스 보기

NoSQL 데이터베이스는 점점 더 인기를 끌고 있습니다. 특히 개발 팀이 점점 더 민첩해지는 방법론을 위해 노력하는 가운데 구조화되지 않은 데이터를 처리하는 속도와 용이성을 부인하기는 어렵습니다.

개발자가 신흥 기술의 취약점 및 기타 과제를 해결하는 데 시간이 걸립니다. 프로덕션 응용 프로그램에서 잠시 사용된 후에만 문제가 표면에 거품을 내기 시작합니다.

NoSQL 데이터베이스도 비슷합니다. 개발자가 응용 프로그램을 안전하게 유지할 수 있도록 알아야 할 주요 위험이 있습니다. 이러한 위험 중 하나는 NoSQL 주입입니다.

NoSQL 주입이 무엇인지, 어떤 손상을 일으킬 수 있는지, 어떻게 해결할 수 있는지 살펴보겠습니다.

NoSQL 주입 이해

NoSQL 주입은 XML 또는 SQL 주입과같은 많은 동일한 사출 취약점으로 인해 발생합니다.

NoSQL 주입을 사용하면 공격자가 임의의 명령을 NoSQL 쿼리에 배치할 수 있습니다. 이렇게 하면 데이터를 도용하고 권한이 충분히 높은 경우 데이터베이스를 변경할 수도 있습니다.

응용 프로그램이 사용자가 제어하는 데이터를 NoSQL 쿼리 식에 직접 배치하면 이러한 식은 종종 함수를 사용하거나 데이터를 도용하거나 변경하도록 조작할 수 있는 기본 제공 연산자가 있는 경우가 많습니다. 그리고 이러한 일이 악의적 인 의도로 실행될 때, 결과는 끔찍할 수 있습니다.

MongoDB 데이터베이스는 이 취약점으로 악용할 수 있는 가장 인기 있는 놀이터 중 하나입니다. "$ne: """는 SQL 세계에서 1=1에 해당하는 연산자이므로 예를 들어 공격자는 UI의 사용자 이름과 암호 필드에 "$ne"라는 문자를 배치할 수 있습니다. 코드가 NoSQL 주입에 취약한 경우 데이터베이스는 사용자 이름과 암호가 빈 문자열과 같지 않은 모든 레코드를 검색합니다. 다른 말로: 그들 모두. 저런.

이 데이터베이스가 암호화되지 않은 경우 공격자는 해당 데이터베이스 내의 모든 단일 사용자의 사용자 이름과 암호를 도용할 수 있습니다. 여기에는 관리자 사용자 이름과 암호가 포함되므로 전체 데이터베이스에 대한 모든 액세스 패스를 제공합니다.

공격자는 종종 항상 사실인 값을 전달하려고 합니다. 또 다른 일반적인 공격은 함수로 설정된 속성에 악성 코드를 삽입하는 것입니다.

예를 들어 MongoDB는 $where라는 속성이 있는 개체를 사용하는 찾기 함수를 사용합니다. $where 속성은 true 또는 false로 평가해야 하는 함수로 설정됩니다. 사용자 입력에 의해 이 기능이 어떤 식으로든 변경되면 NoSQL 주입이 숨어 있을 가능성이 높습니다.

NoSQL 주입의 복잡성에 대한 자세한 내용은 이 InfoQ 문서를확인하십시오.

NoSQL 주입이 위험한 이유를 알고

NoSQL 주입은 아직 가치가 있는 보안 커뮤니티로부터 조사를 받지 못했기 때문에 대부분 위험합니다.

NoSQL 주입의 영향은 기존 SQL 주입과 거의 동일합니다. 데이터를 도난당하거나 변경할 수 있으며, 데이터를 도용하여 계정이 손상될 수 있으며, 삭제 명령이 성공적으로 발급되면 데이터가 완전히 전멸될 수 있습니다.

결론은 MongoDB 및 기타 NoSQL 데이터베이스 엔진이 공격에 취약하다는 것입니다. "SQL 없음"은 주사를 의미하지 않습니다.
고맙게도, 지역 사회의 일부는 메모를하고 단어를 넣어. 더 많은 개발자가 악용될 경우 큰 골칫거리가 될 수 있는 잘 알려지지 않은 nasties로부터 앱을 보호할 수 있도록 스스로를 교육해야 합니다.

패배 NoSQL 주입

NoSQL 주입은 패배하기 어려울 수 있습니다. 안타깝게도 SQL 주입과 마찬가지로 매개 변수화된 쿼리 의 옵션은 없습니다. 그러나 불가능하지는 않습니다. 당신을 도울 수있는 몇 가지 옵션이 있습니다 :

  • 퍼처는 취약점을 감지하는 하나의 방법으로 사용할 수 있습니다. 비록, 인생에서 많은 것 들의 경우처럼, 가장 간단한 접근 방식은 가장 효과적 일 수 있습니다. 여기, 좋은 오래 된 코드 검토는 당신의 가장 강한 동맹.
  • 코드를 검토할 때 사용자 입력이 식값을 설정하거나 함수를 변경할 수 있는 가능한 장소를 찾습니다. 사용자 입력이 쿼리를 변경하는 것을 허용하지 마십시오.
  • 사용자 입력을 정당한 클래스로 캐스팅해야 합니다. 숫자인 경우 문자열인 경우 숫자로 캐스팅하여 문자열에 캐스팅합니다.
  • 사용자 입력과 함께 $where 또는 이와 유사한 eval 함수를 사용하지 마십시오. 대부분의 경우 데이터 모델 이나 스키마를 변경 하 여 해결 할 수 있습니다.
  • 몽고DB 드라이버로 몽구스를 사용해 보십시오. Mongoose를 사용하면 NoSQL 데이터베이스에 대한 스키마를 정의할 수 있습니다. 몽구스에게 입력이 문자열이라고 말하면문자열에 캐스팅됩니다. 따라서 공격자가 전달한 모든 개체는 개체가 아니라 문자열로 처리됩니다.
  • DB를 강화! 권한이 낮은 사용자 계정을 만들고, 쿼리실행 시간을 최대화하며, 항상 조직에 적용되는 보안 모범 사례를 따릅니다.

NoSQL 데이터베이스의 사용 편의성의 단점은 개발자가 보안에 대해 전혀 생각하지 않고 그들을 일어서서 사용하기 시작하는 경향이 있습니다.

NoSQL 데이터베이스를 안전하게 견디고 NoSQL 주사로부터 자신을 보호하는 방법을 배우는 데 시간이 걸리는 것이 중요합니다.

예를 들어 MongoDB 엔터프라이즈 에디션은 문서에 대한 고급 액세스 제어 기능을 제공합니다. 누군가가 응용 프로그램에서 취약점을 찾을 경우 "최소 권한'을 시행하는 것은 심층 방어 (DiD) 전략이 될 수 있습니다.

요약하자면, 우리가 가진 것은 다음과 같습니다.

  • NoSQL 쿼리 식에서 입력을 사용하기 전에 입력을 소독
  • 몽구스처럼 당신을 도울 드라이버를 사용
  • 쿼리 내에서 입력 데이터가 사용되는 방식을 구체적으로 살펴보는 코드 검토 수행
  • 퍼처와 스캐너를 사용하여 코드의 취약점을 찾는 데 도움을 줍니다.

NoSQL은 주사가 아닙니다.

NoSQL 데이터베이스는 확장 가능한 기능과 설정 속도로 인해 빠르게 인기를 얻고 있습니다. 이 기술의 최신성은 개발자가 이를 보호하는 방법을 생각하지 않고 NoSQL 데이터베이스를 사용하도록 유도할 수 있습니다.

NoSQL 데이터베이스는 SQL 데이터베이스가 주입 공격에 취약한 만큼 취약할 수 있으므로 주의해서 행동하고 쿼리에 주의를 기울이십시오. 자세한 내용을 보려면 학습 리소스를 확인하거나 무료 데모를사용하여 기술을 테스트하십시오.

미리 준비 하 고 응용 프로그램에서 NoSQL 주사에 대 한 걱정할 필요가 없습니다. 너무 쉽게!

지금 당장 NoSQL 주입을 찾고 식별하고 수정할 준비가 되었다고 생각하십니까? 보안 코드 경기장, 전사를 입력 :

그리고 그것은 2018년의 랩입니다! 이것은 올해의 우리의 마지막 게시물이 될 것입니다,하지만 잘 1 월 10 일에 다음 코더 정복 보안 가이드와 함께 돌아갑니다, 2019. 곧 봐요!

리소스 보기
리소스 보기

저자

야프 카란 싱

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

코더는 보안을 정복 : 공유 및 학습 시리즈 - NoSQL 주입

게시일: 2018년 12월 20일
Jaap Karan Singh

NoSQL 데이터베이스는 점점 더 인기를 끌고 있습니다. 특히 개발 팀이 점점 더 민첩해지는 방법론을 위해 노력하는 가운데 구조화되지 않은 데이터를 처리하는 속도와 용이성을 부인하기는 어렵습니다.

개발자가 신흥 기술의 취약점 및 기타 과제를 해결하는 데 시간이 걸립니다. 프로덕션 응용 프로그램에서 잠시 사용된 후에만 문제가 표면에 거품을 내기 시작합니다.

NoSQL 데이터베이스도 비슷합니다. 개발자가 응용 프로그램을 안전하게 유지할 수 있도록 알아야 할 주요 위험이 있습니다. 이러한 위험 중 하나는 NoSQL 주입입니다.

NoSQL 주입이 무엇인지, 어떤 손상을 일으킬 수 있는지, 어떻게 해결할 수 있는지 살펴보겠습니다.

NoSQL 주입 이해

NoSQL 주입은 XML 또는 SQL 주입과같은 많은 동일한 사출 취약점으로 인해 발생합니다.

NoSQL 주입을 사용하면 공격자가 임의의 명령을 NoSQL 쿼리에 배치할 수 있습니다. 이렇게 하면 데이터를 도용하고 권한이 충분히 높은 경우 데이터베이스를 변경할 수도 있습니다.

응용 프로그램이 사용자가 제어하는 데이터를 NoSQL 쿼리 식에 직접 배치하면 이러한 식은 종종 함수를 사용하거나 데이터를 도용하거나 변경하도록 조작할 수 있는 기본 제공 연산자가 있는 경우가 많습니다. 그리고 이러한 일이 악의적 인 의도로 실행될 때, 결과는 끔찍할 수 있습니다.

MongoDB 데이터베이스는 이 취약점으로 악용할 수 있는 가장 인기 있는 놀이터 중 하나입니다. "$ne: """는 SQL 세계에서 1=1에 해당하는 연산자이므로 예를 들어 공격자는 UI의 사용자 이름과 암호 필드에 "$ne"라는 문자를 배치할 수 있습니다. 코드가 NoSQL 주입에 취약한 경우 데이터베이스는 사용자 이름과 암호가 빈 문자열과 같지 않은 모든 레코드를 검색합니다. 다른 말로: 그들 모두. 저런.

이 데이터베이스가 암호화되지 않은 경우 공격자는 해당 데이터베이스 내의 모든 단일 사용자의 사용자 이름과 암호를 도용할 수 있습니다. 여기에는 관리자 사용자 이름과 암호가 포함되므로 전체 데이터베이스에 대한 모든 액세스 패스를 제공합니다.

공격자는 종종 항상 사실인 값을 전달하려고 합니다. 또 다른 일반적인 공격은 함수로 설정된 속성에 악성 코드를 삽입하는 것입니다.

예를 들어 MongoDB는 $where라는 속성이 있는 개체를 사용하는 찾기 함수를 사용합니다. $where 속성은 true 또는 false로 평가해야 하는 함수로 설정됩니다. 사용자 입력에 의해 이 기능이 어떤 식으로든 변경되면 NoSQL 주입이 숨어 있을 가능성이 높습니다.

NoSQL 주입의 복잡성에 대한 자세한 내용은 이 InfoQ 문서를확인하십시오.

NoSQL 주입이 위험한 이유를 알고

NoSQL 주입은 아직 가치가 있는 보안 커뮤니티로부터 조사를 받지 못했기 때문에 대부분 위험합니다.

NoSQL 주입의 영향은 기존 SQL 주입과 거의 동일합니다. 데이터를 도난당하거나 변경할 수 있으며, 데이터를 도용하여 계정이 손상될 수 있으며, 삭제 명령이 성공적으로 발급되면 데이터가 완전히 전멸될 수 있습니다.

결론은 MongoDB 및 기타 NoSQL 데이터베이스 엔진이 공격에 취약하다는 것입니다. "SQL 없음"은 주사를 의미하지 않습니다.
고맙게도, 지역 사회의 일부는 메모를하고 단어를 넣어. 더 많은 개발자가 악용될 경우 큰 골칫거리가 될 수 있는 잘 알려지지 않은 nasties로부터 앱을 보호할 수 있도록 스스로를 교육해야 합니다.

패배 NoSQL 주입

NoSQL 주입은 패배하기 어려울 수 있습니다. 안타깝게도 SQL 주입과 마찬가지로 매개 변수화된 쿼리 의 옵션은 없습니다. 그러나 불가능하지는 않습니다. 당신을 도울 수있는 몇 가지 옵션이 있습니다 :

  • 퍼처는 취약점을 감지하는 하나의 방법으로 사용할 수 있습니다. 비록, 인생에서 많은 것 들의 경우처럼, 가장 간단한 접근 방식은 가장 효과적 일 수 있습니다. 여기, 좋은 오래 된 코드 검토는 당신의 가장 강한 동맹.
  • 코드를 검토할 때 사용자 입력이 식값을 설정하거나 함수를 변경할 수 있는 가능한 장소를 찾습니다. 사용자 입력이 쿼리를 변경하는 것을 허용하지 마십시오.
  • 사용자 입력을 정당한 클래스로 캐스팅해야 합니다. 숫자인 경우 문자열인 경우 숫자로 캐스팅하여 문자열에 캐스팅합니다.
  • 사용자 입력과 함께 $where 또는 이와 유사한 eval 함수를 사용하지 마십시오. 대부분의 경우 데이터 모델 이나 스키마를 변경 하 여 해결 할 수 있습니다.
  • 몽고DB 드라이버로 몽구스를 사용해 보십시오. Mongoose를 사용하면 NoSQL 데이터베이스에 대한 스키마를 정의할 수 있습니다. 몽구스에게 입력이 문자열이라고 말하면문자열에 캐스팅됩니다. 따라서 공격자가 전달한 모든 개체는 개체가 아니라 문자열로 처리됩니다.
  • DB를 강화! 권한이 낮은 사용자 계정을 만들고, 쿼리실행 시간을 최대화하며, 항상 조직에 적용되는 보안 모범 사례를 따릅니다.

NoSQL 데이터베이스의 사용 편의성의 단점은 개발자가 보안에 대해 전혀 생각하지 않고 그들을 일어서서 사용하기 시작하는 경향이 있습니다.

NoSQL 데이터베이스를 안전하게 견디고 NoSQL 주사로부터 자신을 보호하는 방법을 배우는 데 시간이 걸리는 것이 중요합니다.

예를 들어 MongoDB 엔터프라이즈 에디션은 문서에 대한 고급 액세스 제어 기능을 제공합니다. 누군가가 응용 프로그램에서 취약점을 찾을 경우 "최소 권한'을 시행하는 것은 심층 방어 (DiD) 전략이 될 수 있습니다.

요약하자면, 우리가 가진 것은 다음과 같습니다.

  • NoSQL 쿼리 식에서 입력을 사용하기 전에 입력을 소독
  • 몽구스처럼 당신을 도울 드라이버를 사용
  • 쿼리 내에서 입력 데이터가 사용되는 방식을 구체적으로 살펴보는 코드 검토 수행
  • 퍼처와 스캐너를 사용하여 코드의 취약점을 찾는 데 도움을 줍니다.

NoSQL은 주사가 아닙니다.

NoSQL 데이터베이스는 확장 가능한 기능과 설정 속도로 인해 빠르게 인기를 얻고 있습니다. 이 기술의 최신성은 개발자가 이를 보호하는 방법을 생각하지 않고 NoSQL 데이터베이스를 사용하도록 유도할 수 있습니다.

NoSQL 데이터베이스는 SQL 데이터베이스가 주입 공격에 취약한 만큼 취약할 수 있으므로 주의해서 행동하고 쿼리에 주의를 기울이십시오. 자세한 내용을 보려면 학습 리소스를 확인하거나 무료 데모를사용하여 기술을 테스트하십시오.

미리 준비 하 고 응용 프로그램에서 NoSQL 주사에 대 한 걱정할 필요가 없습니다. 너무 쉽게!

지금 당장 NoSQL 주입을 찾고 식별하고 수정할 준비가 되었다고 생각하십니까? 보안 코드 경기장, 전사를 입력 :

그리고 그것은 2018년의 랩입니다! 이것은 올해의 우리의 마지막 게시물이 될 것입니다,하지만 잘 1 월 10 일에 다음 코더 정복 보안 가이드와 함께 돌아갑니다, 2019. 곧 봐요!

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.