웹 응용 프로그램에 SQL Server에 액세스하기 위해 SSPI (통합 보안)를 사용하고 있습니까?


13

웹 응용 프로그램 (.net)을 프로덕션 환경에 배포 할 때 통합 보안을 사용하는 것이 더 낫거나 중요합니까?

해커가 웹 서버를 침입하면 컴퓨터를 쉽게 가장 할 수 있기 때문에 중요하지 않은 것 같습니다.

생각?


여기에는 많은 좋은 답변이 있습니다. 승자를 선택하기가 어려웠습니다. 모두 감사합니다.
NotMe

답변:


8

SQL 인증을 사용해야하는 두 가지 유효한 이유는 다음과 같습니다.

  1. 도메인 외부에서 연결되었으므로 통합 인증입니다.
  2. TPC-C 벤치 마크를 실행하고 모든주기를 계산합니다. SQL 인증은 조금 더 빠릅니다.

제안하는 시나리오 (웹 서버 호스트가 완전히 손상됨)의 경우 아무것도 보호 할 수 없습니다. 해커는 최소한 웹 서버가 할 수있는 모든 작업을 DB 서버에서 수행 할 수 있습니다 . 그리고 심층 방어를 통해 그러한 경우의 손실을 최소화하도록 지시 할 수 있습니다. ur 웹 서버에서 사용하는 계정의 DB 권한을 필요한 최소 수준으로 줄이십시오. 둘째, 웹 서버 호스트가 손상된 경우 웹 서버 계정보다 높은 권한을 상승시키는 데 사용할 수 없습니다 (즉, WWW 계정보다 DB에서 더 높은 권한을 가진 자격 증명을 사용하는 WWW 호스트에는 다른 서비스가 없습니다). 이것들은 기본 보안 원칙이며 사용 된 인증 체계와 관련이 없습니다.

SQL 인증 대 Windows 인증은 시나리오에서 분명한 이점을 제공하지 않지만 고려해야 할 다른 문제가 있습니다.

  1. 중앙 집중식 정책 시행 : 암호 수명 및 만료, 계정 해지 등 암호 정책을 설정할 수있는 곳이 한 곳 있습니다.
  2. 명의 도용 및 신뢰 위임 제어 SQL 위임이 신뢰 위임 체인에서 사용되면 모든 베팅은 실제 '위임'이 아니므로 더 이상 귀하의 정책이 부과하는 제한에 따르지 않으므로 베팅이 해제됩니다
  3. 감사 : LSA에서는 SQL 인증을 볼 수 없으므로 전체 감사 인프라를 우회 할 수 있습니다. SQL auth 이벤트에 대한 SQL 생성 레코드를 명시 적으로 추가해야하지만 이벤트 로그에서 소스, 제공자 및 스키마가 다른 이벤트로 인해 사과와 오렌지가 혼합됩니다.

마지막 참고 사항 : TDS 프로토콜은 트래픽을 통해 일반 텍스트로 SQL auth 암호를 노출하지만 일반적으로 트래픽의 SSL 암호화를 요청하여 완화됩니다.

그렇다면 왜 web.config에 암호를 명확하게 저장하는 SQL auth WWW 호스트가 표시됩니까? 이들은 나쁜 개발자 / 관리자이며 그들 중 하나가되지 마십시오.

msdn.microsoft.com/en-us/library/aa378326(VS.85).aspx

technet.microsoft.com/en-us/library/ms189067.aspx


6

SSPI를 사용하지 않으면 사용자 이름과 비밀번호를 소스 파일에 하드 코딩하는 것입니다.

사용자 이름과 비밀번호를 소스 파일로 하드 코딩하는 경우 모든 직원이 액세스 할 수 있습니다.

이것은 상대적으로 안전하지 않습니다. 불만을 품은 전직 직원은 정보를 악의적으로 사용할 수 있습니다. 방문자는 화면 어딘가에서 코드를 볼 수 있습니다. 또는 소스 코드가 실수로 빠져 나올 수도 있습니다.

SSPI의 장점은 암호가 명확한 곳에 저장되지 않는다는 것입니다.


사실이지만 불만이있는 직원은 SSPI 연결을 사용하는 웹 페이지를 간단히 설치할 수도 있습니다. 암호 자체에 액세스하는
것만 큼 ​​나쁩니다

1
그 / 그녀의 암호가 비활성화 된 것 때문에 불만 EX 직원은 더 이상 액세스 할 수없는 것
Spolsky 조엘

6

지금까지 다른 답변은 좋았지 만 다른 답변은 관리입니다.

조만간 여러 SQL Server가 생길 수 있습니다. 특히 보안 문제가 발생하면 앱과 여러 SQL Server 간의 SQL 인증 관리가 약간 어려워집니다. Windows 인증 비밀번호를 한 번 변경하면 모든 서버에서 즉시 변경됩니다. SQL 인증 비밀번호를 교체해야하는 경우에는 더 힘들어집니다. 아마 전혀하지 않을 것입니다. 보안 상 위험합니다.


작업자 프로세스 ID를 위해 각 웹 서버에서 비밀번호를 변경해야합니까? 구성 파일 변경보다 자동화하기가 더 어렵습니다. 요즘, 모든 선택은 자동화의 용이성을 기반으로합니다.
Luke Puplett

2

100 % 확신 할 수는 없지만 주요 요점은 SQL 인증이 안전하지 않다는 것이므로 Windows 인증을 사용하는 것이 좋습니다. 앱 설정 방법에 따라 Windows 인증을 사용하여 컴퓨터에 적절한 자격 증명을 암호화 된 형식으로 저장할 수도 있습니다. 나는 그것이 SQL 인증으로 실제로 가능하다고 생각하지 않습니다. 당신은 그것을 난독 화 할 수 있지만 궁극적으로 분명해야합니다.

또한 해커가 서버에 침입 할 수 있다고해서 게임이 끝났다는 의미는 아닙니다. 해커는 권한이없는 프로세스를 제어 할 수 있지만 서버에서 다른 작업은 수행하지 않을 수 있습니다. 따라서 모든 것을 관리자 또는 시스템으로 실행하지 말고 최소 권한 서비스 계정을 사용하는 것이 중요합니다.


1

가장 좋은 방법은 웹 서버에 침입하는 경우 수행 할 수있는 작업을 제한하는 것입니다. 이는 애플리케이션이 작동하는 데 필요한 SQL 권한 만 부여 함을 의미합니다. 응용 프로그램 DBO 권한을 부여하는 것이 훨씬 쉽지만 웹 서버에 대한 공격이 성공하면 DB를 훨씬 더 취약하게 만듭니다.


1

내부 개인 네트워크의 내부 웹 서버에 대해 이야기하고 있다고 가정 함으로써이 모든 것을 머리말로 설명하겠습니다.

기계 가장을 시작합니다. 응용 프로그램 풀 ID가 네트워크 서비스이고 .NET 응용 프로그램에 가장이 없으면 웹 응용 프로그램은 컴퓨터의 컴퓨터 계정을 사용하여 백 엔드 SQL Server에 연결됩니다. 이는 해당 컴퓨터 계정에 대한 액세스 권한이 부여되었음을 의미합니다. Microsoft CRM은 이런 방식으로 작동합니다.

그러나 ID를 지정한 경우 해당 사용자 계정은 SQL Server에 액세스해야합니다. 공격자가 웹 서버를 손상시킨 경우 효과적으로 신원 계정과 동일한 액세스 권한을 갖지만 SQL Server 로그온을 사용하더라도 여기에서 아무것도 변경되지 않는다는 것이 사실입니다. 액세스 권한이 있으면 웹 응용 프로그램을 수정하여 원하는대로 수행 할 수 있으며 백엔드 SQL Server에서 최대한 보안이 허용되도록 할 수 있습니다.

이제 SSPI를 사용하는 이유에 대해 설명합니다. 우선, SQL Server 기반 로그인을 사용하지 않습니다. 이는 Active Directory가 유일한 보안 소스임을 의미합니다. 즉, 정상적인 감사 수단을 통해 유효하지 않은 액세스를 결정해야합니다. 둘째, 필요한 다른 앱이 없으면 SQL Server를 Windows 인증 전용 모드로 둘 수 있습니다. 즉, SQL Server 로그인이 허용되지 않습니다. 즉, sa에 대한 공격이 시작되기 전에 중지됩니다. 마지막으로 복구가 더 쉬워집니다. SQL Server 기반 로그인을 사용하는 경우 SID 및 암호화 된 비밀번호로 로그인을 추출해야합니다. Windows 기반 사용자 계정을 "서비스 계정"으로 사용하는 경우 새 SQL Server로 이동하면 로그인을 생성하여


공개적으로 노출 된 서버와 내부적으로 사용되는 서버 사이에 실제로 차이점이 있는지 확실하지 않습니다. 그 외에는 좋은 설명입니다.
NotMe

물론입니다. 공개적으로 노출 된 서버는 일반적으로 도메인에 있지 않아야합니다. 즉, 신뢰할 수있는 연결을 사용할 수 없습니다. SSPI는 옵션이 아닙니다.
K. 브라이언 켈리

1

문제는 "더 나은"것입니다. 질문자의 맥락, 가치 및 우선 순위에 의존하기 때문에 대답하기가 어렵습니다.

개인적으로 저는 SQL 인증을 좋아합니다.

  • AD는 서비스 계정을 실행하고 지원하고 관리하는 또 다른 것입니다.
  • 호스팅 환경에서 AD를 사용할 수 있어야합니다.
  • AD는 클라우드 또는 하이브리드 클라우드로 이동하기 어렵게 만듭니다.
  • AD를 사용하면 조직의 다른 부분에서 관리자가 없어야하는 그룹에 서비스 계정을 쉽게 추가 할 수 있습니다.
  • SSPI는 구성에서 SQL 호스트 이름을 암호화해야하므로 연결 문자열 암호화 문제를 무시하지 않습니다.
  • SQL 인증은 간단하고 텍스트 구성이며 배포가 쉽습니다.
  • 앱 풀 ID를 설정하는 것은 각 환경에 대한 자동화 스크립트에서 사용자 이름과 비밀번호를 자동화 한 다음 숨기는 또 다른 방법입니다.
  • 두 개의 연결 문자열을 사용하면 롤링 암호를 쉽게 사용할 수 있으므로 다운 타임없이 암호를 업데이트 할 수 있습니다.

마지막 포인트 : 각 연결 문자열을 시도하도록 연결 관리자 클래스를 코딩하십시오. 그러면 첫 번째 구성에서 비밀번호를 변경하고 변경을 푸시 한 다음 두 번째 연결로 장애 조치 한 다음 MSQL에서 비밀번호를 업데이트합니다 첫 번째가 다시 사용됩니다. 두 번째 암호를 첫 번째 암호와 동일하게 설정하고 다음에 준비 할 수 있도록 최종 구성 변경이 필요합니다.


0

사용자가 SQL Server Management Studio와 같은 다른 클라이언트 도구를 통해 데이터베이스를 직접 조작하지 않으면 일반적으로 응용 프로그램에 대해 단일 SQL 로그인을 만들고 필요한 액세스 권한을 부여합니다. 이 시점에서 사용자는 웹 앱 인터페이스에서 허용하는대로 수행 할 수있는 작업이 제한됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.