it-swarm-korea.com

데이터베이스 암호화 보안

웹 애플리케이션 API에서 데이터베이스 데이터를 암호화 및 해독하고 있습니다. 내 웹 서버가 손상된 경우 다른 사람이 동일한 방법을 사용하여 데이터를 검색하지 못하게하려면 어떻게해야합니까?

예를 들어, 데이터베이스 암호화/복호화를 수행하는 웹 서버에 PHP 응용 프로그램이 있다고 가정합니다. 웹 서버가 손상되면 다른 사람이 키에 액세스하고 데이터를 해독하지 못하게하는 원인이 무엇입니까? .

문제는 언어에 국한된 것이 아닙니다. 문제는 웹 애플리케이션이 사용할 수있는 키를 저장하지만 서버에 대한 관리 액세스 권한이있는 사람으로부터 보안을 유지하는 것입니다.

16
ksexton

이 작업을 마치면 암호화를 웹 서버에서 완전히 옮겼습니다. 기본적으로 다음과 같은 시나리오가 있습니다.

  • 암호화 된 데이터를 저장하는 데이터베이스 서버
  • 애플리케이션을 실행하고 암호화 된 데이터를 저장/검색하는 웹 서버
  • 암호화 및 복호화를 수행하고 잠겨있는 암호화 서버

기본적으로 웹 서버는 내부 네트워크에서만 사용할 수있는 암호화 서버에서 웹 서비스를 호출하며 "여기에 일부 데이터와 데이터 유형이 있습니다"라고 말합니다. 암호화 서버는 데이터 유형에 따라 키 크기, 키 만료 등을 결정하고 새 대칭 키와 솔트로 암호화하고 이진 Blob과 키 식별자를 다시 전달합니다. 그런 다음 암호화 서버는 자체 SQL 데이터베이스에 키를 저장하지만 먼저 암호화 서비스 만 액세스 할 수있는 X509 인증서로 키를 보호합니다. 따라서 데이터베이스에 원격으로 액세스 할 수 있다면 여전히 OS 액세스가 필요하므로 쓸모가 없습니다. X509 인증서를 가져와 키를 해독하고 어떤 경우에도 데이터는 다른 곳에 보관됩니다.

암호 서버 관리자 암호는 "휴식 상자"에 보관되며 두 사람이 암호를 얻기 위해 부품을 결합하는 데 필요합니다.

즉, 개발자는 어떤 알고리즘을 사용할지 또는 암호화 서버가 관리하는 보안 키 저장소에 대해 걱정할 필요가 없으며, 프로세스 변경이나 새로운 규칙이 나올 때 사용되는 알고리즘을 업데이트 할 필요없이 업데이트 할 수 있습니다. 암호화 서버 이외의. 웹 애플리케이션을 실행하는 프로세스 만 암호화 서버를 호출 할 수 있으며 일반 사용자 계정은 호출 할 수 없으며 관리자 계정도 호출 할 수 없습니다. 웹 데이터베이스를 볼 수있는 데이터베이스 관리자는 암호화 된 데이터 만 볼 수 있으며 키에도 액세스 할 수 없습니다.

웹 서버가 손상 되더라도 할 수있는 일이 여전히 제한적입니다. 암호화 서버를 호출하여 키를 얻은 다음 데이터 저장소 데이터베이스를 호출하여 키가 참조하는 데이터를 가져옵니다. 이러한 일이 어떻게 발생하는지 또는 내부 네트워크에서 서버가 어디에 있는지 알지 못한 채 임의의 코드를 실행할 수있는 능력 만 손상되면 수행하기 어렵습니다.

물론 타협이 루팅이고 공격자가 코드를 잡고 프로세스를 가장 할 수 있다면 모든 베팅은 꺼져 있지만 항상 그렇습니다.

5
blowdart

여기에있는 대답은 훌륭하지만 (@blowdart 및 @Tate 모두) 고려해야 할 중요한 사항은 웹 사이트가 손상되면 보안에 관한 한 게임 오버라는 것입니다.

악의적 인 탈취 코드는 코드 액세스, 프로세스 실행, 데이터베이스 등을 포함하여 사이트에서 할 수있는 일을 any 할 수 있습니다. 즉, 어떻게 암호화를 수행하든, 키를 어디에 두든 상관없이 그것에 접근하여 데이터를 해독 할 수도 있습니다. 당신이 무엇을 시도하든, 기껏해야 모호함-최악의 경우, 그들은 당신의 코드가 하드 암호 해독 작업을 수행하도록하고 나중에 가로 챌 수 있습니다.

7
AviD

데이터베이스 보안과 관련하여 지금 내 생각에 가장 좋은 리소스는 Securosis의 논문입니다.

데이터베이스 암호화 또는 토큰 화 솔루션 이해 및 선택
이 백서에는 주요 데이터베이스 암호화 및 토큰 화 기술에 대한 설명, 가장 적합한 암호화 유형을 결정하는 데 도움이되는 의사 결정 트리, 실제 배포에서 가져온 사용 사례가 포함되어 있습니다. 데이터베이스 암호화 또는 토큰 화 프로젝트를 고려중인 경우이 문서를 통해 연구 및 아키텍처 개발 시간을 절약 할 수 있습니다.

http://securosis.com/research/publication/understanding-and-selecting-a-database-encryption-or-tokenization-solution/

PDF 직접 링크 : http://securosis.com/reports/Securosis_Understanding_DBEncryption.V_.1_.pdf

5
Tate Hansen

첫째, 이것은 매우 어려운 문제입니다. 기본적인 문제는 웹 애플리케이션이 데이터를 해독 할 수있는 충분한 지식을 가지고 있다면 하이재킹을 당하면 데이터를 해독하기에 충분한 정보를 갖게된다는 것입니다. 정말 거기에서 시작해야합니다. 이것은 몇 가지를 의미합니다.

  1. 애플리케이션이 데이터를 복호화하는 것을 신뢰하는 경우 데이터가 인계되면 모든 데이터를 복호화 할 수 있습니다.

  2. 데이터를 해독하는 데 응용 프로그램을 신뢰하지 않는 경우 일부 일반 텍스트 집합으로 신뢰할 수 있습니다.

한 가지 옵션은 암호화 및 복호화를 처리하는 데이터베이스와 애플리케이션간에 서비스를 제공하는 것입니다. 이것은 두 사람이 함께 작업하여 키를 메모리에 저장하도록 설계 할 수 있지만 그렇지 않은 경우에도 여전히 심층적 인 방어를받을 수 있습니다. 웹 애플리케이션이 인계되면 복호화 서비스가 얻을 수있는 항목에만 액세스 할 수 있으므로 완화가 해당 전략의 일부가 될 수 있습니다. 그런 다음 공격자는 원시 데이터에 액세스하기 위해 해독/암호화 서비스를 손상시켜야합니다 (직장에서 심층 방어).

(솔직히 저는이 암호화/복호화 서비스를 데이터베이스와 병합하는 경향이 있지만 주어진 RDBMS에 대해이를 안전하게 수행하는 방법에 대한 책을 쓸 수 있으며 간단한 솔루션이 아닙니다.)

2
Chris Travers

이 스레드에 대한 꽤 좋은 답변입니다. 이것은 기본적으로 암호화 방법과 암호화 키 저장이라는 두 가지 주요 문제에 이릅니다.

저는 DB 암호화 공급 업체에서 일했으며 D' Amo 솔루션을 배포하는 여러 유사한 프로젝트에서 일했습니다. 우리는 일반적으로 DB 유형에 따라 DB 수준에서 데이터를 암호화하지만 이와 같은 경우 원격으로 모니터링 할 수있는 암호화/복호화 보안 에이전트 (모듈)를 웹 서버에 설치하여 수행 할 enc/dec 정책을 구성합니다. 조작.

우리의 일반적인 조언은 우리가 제공 할 수있는 별도의 전용 키 관리 서버 (KMS)에 키를 저장하는 것입니다. 일부 고객은 추가 단계를 거쳐 제 3 자 회사에서 하드웨어 보안 모듈 (HSM)을 구매하거나 핵심 관리. 우리의 솔루션은 열 기반이므로 각 암호화 된 열에 대해 서로 다른 키가있었습니다. 또한 보안 에이전트가 KMS에서 키를 가져올 때 MITM 공격을 피하기 위해 보안 에이전트와 KMS 간의 통신을 보호해야합니다.

공개 : 저는 Penta Security Systems Inc.의 엔지니어입니다.

1
NA AE