2010-04-08 3 views
6

나는이 문제에 대해 충분히 의논하지 않았다. 매우 당황 스럽다. :.Net SQLConnection 클래스에 대한보다 안전한 대안이 있습니까?

This article은 windbg를 사용하여 실행중인 .Net 프로세스 문자열을 메모리에 덤프하는 방법을 알려준다.

관리되지 않는 고정 된 메모리 블록을 사용하는 SecureString 클래스를 연구하는 데 많은 시간을 할애하여 데이터를 암호화 된 상태로 유지합니다. 좋은 물건.

값을 사용하여 System.String 형식 인 SQLConnection.ConnectionString 속성에 할당하면 문제가 발생합니다. 이것은 무엇을 의미 하는가? 음 ...

  • 이 그것은
  • 가비지 컬렉션은 메모리에 사본을 떠나 주위를 이동 일반 텍스트로 저장되어
  • 그것은 windbg를 메모리를 읽을 수는

그 완전히을 Negate 덤프

  • SecureString 기능!

    그 외에 SQLConnection 클래스는 상속되지 않으며, 대신 SecureString 속성으로 내 자신을 굴릴 수 없습니다. 폐쇄 소스에 대한 예. 예.

    새로운 DAL 레이어가 진행되고 있지만 새 주 버전과 많은 사용자에 대해 모든 사용자가 업그레이드되기까지 최소 2 년이 걸릴 수 있습니다. 어떤 이유로 든 이전 버전을 무기한으로 유지할 수 있습니다.

    빈도 때문에 연결이 사용되므로 SecureString에서 마샬링하면 도움이되지 않습니다. GC가 돌아올 때까지 불변의 오래된 복사본이 메모리에 고정되어 있기 때문입니다. 일부 클라이언트는 도메인에서 작동하지 않고 다른 클라이언트는 네트워크에서 로밍하고 연결하기 때문에 Windows 통합 보안은 옵션이 아닙니다.

    어떻게 메모리에 연결 문자열을 보호하여 windbg에서 볼 수 없습니까?

  • +0

    고객 시스템 또는 웹 앱에있는 애플리케이션에 대해 이야기하고 있습니까? – ALOToverflow

    +0

    이것은 클라이언트 측 데스크탑 응용 프로그램입니다 .Net 2.0, 클라이언트 - 서버 아키텍처 – invert

    답변

    10

    다른 프로세스의 메모리를 읽을 수있을 정도로 컴퓨터를 제어하는 ​​경우 string에 대한 참조로 SecureString 클래스에 대한 참조를 바꿀 수도 있습니다. 다른 프로세스에서 사용할 수있는 개인 키에 액세스 할 수 있습니다.

    프로세스 메모리를 소유 한 해커에 대한 방어책이 없습니다. :)

    +0

    확실히 확실한 점! 내가 목표로하는 것은 공격의 표면적을 줄이는 것이다. 최소한 보안에 대한 흥미로운 훈련이 있습니다. – invert

    4

    하지 여전히 질문 만에 진짜 대답 :

    시도는 Windows 인증 대신 SQL 인증을 사용합니다. 프로그램 메모리에서 암호를 안전하게 관리하더라도 사용자는 트래픽 스니퍼를 사용하여 암호를 볼 수 있습니다.

    Windows 인증의 또 다른 장점은 SQL Server가 사용자의 암호 해시를 저장할 필요가 없다는 것입니다. sql 인증을 사용하면 해커가 해시에서 암호를 브 루핑하거나 다른 암호로 바꿀 수 있습니다. 사실 암호는 일부 프로그램을 사용하여 쉽게 대체 할 수 있습니다.

    +0

    나는이 방법을 선호합니다. 그러나 사용자 중 3 분의 1은 웹을 통해 원격으로 로밍하고 연결할 때가끔 있습니다. – invert

    +0

    다음 내용을 명확히하십시오. SQL Server 인스턴스가 전 세계 (공개 IP 주소 및 공개 포트)에 열려 있다고 말하고 있습니까? 사용자의 설명을 보면 VPN없이 웹을 통해 SQL 연결을 실행중인 클라이언트 컴퓨터에서 실행중인 데스크톱 응용 프로그램이 열린 SQL Server에있는 것처럼 들립니다. 그렇다면 암호 보안을 위해 클라이언트에서 프로세스 메모리를 읽는 복잡한 시도가 훨씬 더 큰 보안 문제가됩니다. – David

    +0

    표준 포트가 아닌 사용자 정의 포트를 사용하더라도 정확합니다. 이 위험과 관련하여 생각하고있는 특정 우려 사항/링크는 무엇입니까? 이 문제에 대해 경영진에게 접근하고 싶습니다. – invert

    2

    프로세스와 SQL Server 간의 통신은 백본에서 이상적으로 발생하며이 프로세스가 손상되면 가장 걱정할 필요가 없습니다.

    +0

    지난 주에 우리가 저작권 침해를 신청 한 것은 클라이언트 측에 초점을 맞춘 이유입니다. 고객이 시스템을 복제하기로 결정했을 때 스크린 샷이 있습니다. , 그것은 꽤 우스운 이야기 다. 이것이 나를 보안에 대한 심층적 인 시각으로 만드는 것입니다. – invert

    1

    당신이 당신의 연결 문자열 자격 증명이 일부 해커에 노출 될 수 있음을 궁금해하는 경우가 클라이언트 측 데스크톱 응용 프로그램, 이래로,이

    당신은 당신의 SQL 서버에 연결하면 ... 설계 결함이다 관리자 자격 증명으로 문제가 발생했습니다. 제한이있는 사용자를 만들어 앱에서 사용해야합니다.

    데이터베이스를 노출하려는 성원이 있다면 앱에서 웹 서비스에 액세스 할 수 있습니다. 이 웹 서비스는 데이터베이스에 액세스하여 결과를 반환합니다.

    +0

    SQL 자격 증명은 제한적이지만 시스템의 크기 때문에 OP에서 말한 것처럼 DAL 서비스는 주요 릴리스 용입니다. 현재 설치에 적합한 대안을 찾고 있습니다. 디자인 결함 예, 확실히! – invert

    +0

    제한된 자격 증명을 가진 사용자를 추가 할 수 없습니까? 데이터베이스에 대한 호출을 서버에있는 응용 프로그램/웹 서비스로 리디렉션 할 수 있습니까? 종종 보안상의 설계 결함에 대해 이야기 할 때, 가능하고 _ 효과적인 패치는 ** 실제로 ** 제한적입니다. – ALOToverflow

    +0

    '해커'는 클라이언트 관리를 의미하며 우리 시스템을 리버스 엔지니어링하는 개발자를 의미합니다. – invert

    관련 문제