Tại sao một ứng dụng không nên sử dụng tài khoản sa


21

Câu hỏi đầu tiên của tôi, xin hãy nhẹ nhàng. Tôi hiểu rằng tài khoản sa cho phép kiểm soát hoàn toàn máy chủ SQL và tất cả các cơ sở dữ liệu, người dùng, quyền, v.v.

Tôi có một niềm tin tuyệt đối rằng các ứng dụng không nên sử dụng mật khẩu sa mà không có một doanh nhân hoàn hảo, tập trung lý do tại sao. Câu trả lời cho Câu hỏi này bao gồm rất nhiều lý do của tôi cho một cuộc thảo luận tập trung vào CNTT

Tôi đang bị buộc phải chấp nhận một hệ thống quản lý dịch vụ mới S NOT KHÔNG hoạt động trừ khi nó sử dụng mật khẩu sa. Tôi chưa bao giờ có thời gian để tìm hiểu lý do tại sao khi thiết lập đánh giá nhưng nhóm máy chủ đã cố gắng cài đặt nó để sử dụng một vai trò cố định mà tôi đã thiết lập kết hợp db_c [và các quyền khác mà tôi nghĩ nó sẽ yêu cầu. mà thất bại Sau đó tôi để nhóm máy chủ cài đặt với tài khoản sa nhưng chạy dưới một tài khoản trong vai trò dbo cho cơ sở dữ liệu của nó nhưng điều đó cũng thất bại. Thật khó chịu, tôi đã cố gắng để nó chạy với một tài khoản trong vai trò sysadmin nhưng ngay cả điều đó không thành công và không có thông báo lỗi hữu ích cho phép tôi tìm ra những gì đang diễn ra mà không mất nhiều thời gian hơn tôi có sẵn. Nó sẽ chỉ hoạt động với tài khoản sa và mật khẩu được lưu trong văn bản rõ ràng trong tệp cấu hình.

Khi tôi hỏi điều này và nhóm máy chủ đã nói chuyện với nhà cung cấp, họ nhận được câu trả lời đáng lo ngại về 'Có vấn đề gì với điều đó?' và sau đó 'chúng ta có thể nhìn vào việc xáo trộn mật khẩu' xáo trộn ffs

Tôi biết rằng có nhiều cách và phương tiện để hạn chế quyền truy cập vào tệp nhưng theo tôi, đó chỉ là một điểm yếu khác trong bảo mật

Dù sao, câu hỏi của tôi là, ai đó có thể chỉ cho tôi một số tài liệu mà tôi có thể sử dụng để giải thích cho doanh nghiệp lý do tại sao đây là một điều xấu và nên là không lớn không. Tôi làm việc trong một lĩnh vực có nghĩa là tôi cần phải bảo mật một cách nghiêm túc và đã đấu tranh để làm cho doanh nghiệp hiểu và cuối cùng có thể bị xếp hạng ngoài dù sao nhưng tôi cần phải cố gắng.


1
sahoặc bất kỳ thành viên của sysadmin, bao gồm cả đăng nhập windows?
Remus Rusanu

chỉ sa và sa :-(
SQLDBAWithABeard

1
Bạn cần có thêm thông tin từ nhà cung cấp. Cụ thể những gì họ đang làm mà yêu cầu sarõ ràng.
Aaron Bertrand

11
Thông thường khi một nhà cung cấp nói rằng họ cần phải đăng nhập một cách rõ ràng, điều đó có nghĩa là họ đơn giản đã không kiểm tra ứng dụng của họ theo bất kỳ cách nào khác (hoặc đã làm một lần và nó đã bị lỗi do họ không xem xét trước khi quyết định "chúng tôi sẽ chỉ dán với sa "), đó không phải là thứ sẽ khiến tôi tự tin. Đừng trực tiếp thực hiện chiến thuật này với nhà cung cấp, tìm hiểu thêm về mặt ngoại giao sẽ nhận được kết quả tốt hơn!
David Spillett

David có chính xác tôi tin từ các giao dịch ngắn gọn của tôi với nhà cung cấp
SQLDBAWithABeard

Câu trả lời:


21

Nó phụ thuộc vào doanh nghiệp của bạn, nhưng điều chính trong hầu hết các trường hợp là đảm bảo rằng nó không được coi là một vấn đề CNTT. Đây là một vấn đề bảo mật và trong khi hai người kinh doanh ồ ạt chồng chéo có nhiều khả năng lắng nghe nếu bạn nói "bảo mật" hơn là bạn chỉ "rên rỉ về công cụ CNTT nói chung".

Bạn có làm việc với bất kỳ khách hàng nào có yêu cầu bảo mật không? Đó là một nơi tốt để bắt đầu. Nếu chúng tôi chạy một ứng dụng có quyền truy cập cấp độ hoặc chỉ ứng dụng không bảo mật thông tin đăng nhập của nó ngay cả khi không sử dụng quyền truy cập riêng tư (chúng tôi đặc biệt thích tích hợp Windows hơn là lưu trữ / người dùng nếu có thể) và chúng tôi phải bảo mật kiểm toán, kiểm toán đó sẽ thất bại và chúng tôi sẽ có nguy cơ mất khách hàng và / hoặc phải trả lại tiền cho khách hàng của nhóm chúng tôi (các tổ chức ngân hàng trong trường hợp sản phẩm tôi làm việc chủ yếu, các bộ phận khác của nhóm đối phó với cảnh sát và sức khỏe chính quyền và vv) an ninh là một phần của việc cung cấp của chúng tôi là phù hợp cho mục đích. Người kinh doanh sẽ hiểu mức độ nghiêm trọng của mối đe dọa tiềm tàng đó ngay cả khi họ thường không trả nhiều hơn dịch vụ môi giới cho các khuyến nghị CNTT.

Ngay cả khi bỏ qua các yêu cầu áp đặt của khách hàng, nếu bạn cố gắng đáp ứng các tiêu chuẩn bảo mật tiêu chuẩn khác nhau của ngành thì một lần nữa, loại xác thực ứng dụng này sẽ khiến bạn thất bại khi đối mặt với kiểm toán vì cho đến nay vẫn là một thực tế tốt nhất. trong danh sách "đơn giản là không nên làm". Hãy nói rõ với các nhà sản xuất mô tả kinh doanh của bạn rằng bảo mật là một phần quan trọng của ứng dụng và việc nhà cung cấp này dường như không nhận thức được (hoặc ít nhất là quan tâm một cách thích hợp) khiến bạn nghi ngờ về những gì họ có thể không có khả năng đối phó với: biết về bảo mật DB, thực tiễn tốt nhất là (tốt, nên là) một phần công việc của họ và làm cho nó không khó.

Cũng chỉ ra rằng bạn (người mua) nên đưa ra các yêu cầu bảo mật hợp lý cho nhà cung cấp, chứ không phải theo cách khác. Đó là dữ liệu của bạn, vì vậy họ không đủ điều kiện để nêu những gì được coi là đủ an toàn.


Hà. Không nhận ra nhập thêm bình luận Có thể nói rằng nơi tôi làm việc, an ninh của tất cả các loại là một mối quan tâm đáng kể, hãy xem nó giống như cảnh sát nếu bạn muốn. Tuy nhiên, những người ra quyết định không xem sa là một mối quan tâm. Kiểm toán là một nơi tốt để bắt đầu và tôi sẽ điều tra thêm.
SQLDBAWithABeard

1 Tôi đặc biệt thích những nhận xét rằng đây là một an ninh Vấn đề không phải là một vấn đề.
Kenneth Fisher

2
Tôi sẽ do dự để mua bất cứ thứ gì từ một nhóm người nghĩ rằng không nên để chìa khóa cho vương quốc ngồi trong một tập tin cấu hình bằng văn bản đơn giản. Tôi biết đó không phải là cuộc gọi của bạn, nhưng nếu bạn có thể khiến The Deciders thấy được ý tưởng khủng khiếp đó là gì và nó nói gì về nhà cung cấp, điều đó có thể giúp ích cho trường hợp của bạn.
mdoyle

Mdoyle - Vấn đề là khi tôi tìm hiểu thêm về nó là Người quyết định nhìn thấy mọi thứ bằng dấu £ và vì đây là bản nâng cấp từ phiên bản cổ nên nó đang có giá rẻ. Tôi nghĩ rằng tôi đang chiến thắng một chút nhờ vào những người tốt ở đây. Tôi đã trì hoãn việc kiểm tra phần máy chủ web này cho đến nay ít nhất
SQLDBAWithABeard

20

Không có ứng dụng cần phải có quyền truy cập SA - bao giờ hết. (Trừ khi mục đích duy nhất của nó là quản trị cơ sở dữ liệu thuộc loại nào đó.)

Đó là một quy tắc chung để không bao giờ cấp nhiều quyền hơn cho bất kỳ thông tin đăng nhập nào (ứng dụng- hoặc cá nhân-) so với doanh nghiệp yêu cầu đăng nhập phải có.

Không có ứng dụng nào là hoàn toàn an toàn. Hầu hết đều có một số loại lỗ hổng SQL Injection hoặc XSS. Nếu kẻ xâm nhập thực hiện tuyên bố về lựa chọn của mình và có quyền truy cập 'SA', có rất nhiều điều có thể xảy ra với dữ liệu của bạn có thể giết chết doanh nghiệp ngay lập tức. (Đặc biệt nếu dữ liệu cần được tin cậy vì nó được sử dụng bởi cơ quan thực thi pháp luật.) Hỏi người nắm giữ cổ phần họ sẽ phải làm gì, nếu ai đó có thể cố tình thay đổi ngay cả một bản ghi và thông tin đó đã bị rò rỉ.

Giờ đây, với quyền truy cập 'SA', không chỉ cơ sở dữ liệu của ứng dụng có thể được thay đổi mà còn cả mọi cơ sở dữ liệu khác trên hệ thống. Vì vậy, hãy hỏi các bên liên quan của bạn những gì họ sẽ làm nếu bạn tạo một bản sao của TẤT CẢ cơ sở dữ liệu của bạn và gửi nó đến tờ báo. Bởi vì điều đó có thể xảy ra nếu một nhân viên bất mãn nhận ra lỗ hổng bảo mật này tồn tại.

Các nhà cung cấp cho biết họ có thể tranh giành mật khẩu. Đó là BS. Ứng dụng cần truy cập vào mật khẩu trong Cleartext để sử dụng nó, vì vậy khóa để giải mã mật khẩu sẽ được lưu trữ được xắp xếp lại ngay bên cạnh nó. Ngoài ra, như đã đề cập trước đó, vấn đề thực sự không phải là ai đó tìm thấy mật khẩu này; đó là những người (mis) sử dụng hệ thống này thông qua lỗ hổng sẽ có quyền truy cập đầy đủ vào tất cả các cơ sở dữ liệu của bạn mà không bao giờ nhìn thấy mật khẩu.

Nguyên nhân rất có thể khiến SA được yêu cầu là ứng dụng cần tương tác với SQL Agent. Ít nhất đó là một trong những chức năng khó hơn để thực hiện đúng và hầu hết mọi người chỉ đi theo con đường "sử dụng SA" để đi xung quanh nó. Yêu cầu 'SA' có thể là do nhà cung cấp không biết cách kiểm tra quyền sysadmin.

Có hai giải pháp mà bạn có thể thử:

  1. Đổi tên SA (một cách thực hành tốt nhất về bảo mật) và tạo một tài khoản mới gọi là 'SA' với các quyền bị hạn chế. (Không bao giờ thử điều này, nhưng nó sẽ hoạt động)

  2. Đừng cài đặt phần mềm. Bạn là một người chuyên nghiệp không thể chịu trách nhiệm cho hành động đó, vì vậy bạn không nên cài đặt nó. Để cung cấp cho bạn một so sánh, yêu cầu một thợ sửa ống nước chạy dòng khí trực tiếp qua lò sưởi thay vì xung quanh nó để tiết kiệm một số đường ống / tiền. Bạn có thể cười vào hình ảnh này, nhưng tôi tin rằng đó là một so sánh thích hợp - Phần mềm này sẽ sớm nổ tung, có thể sớm hơn. Và khi nó làm điều đó cũng có thể làm cho doanh nghiệp xuống.

Nếu tất cả điều này không ngăn "họ" yêu cầu phần mềm này, khuyến nghị cuối cùng tôi có thể cung cấp cho bạn là chạy. Nếu có điều gì đó xảy ra với dữ liệu, bạn sẽ là người đầu tiên chịu trách nhiệm. Vì vậy, với ứng dụng này có thể bạn không có bất kỳ bảo mật công việc nào, vì vậy hãy tìm một nhà tuyển dụng cung cấp cho bạn ít nhất một số.


4
+1 chỉ cho simile "dòng khí trực tiếp qua lò sưởi" .
ypercubeᵀᴹ

Trong SQL Server, tài khoản sa không thể được đổi tên. Nó có thể, tuy nhiên, bị vô hiệu hóa.
Greenstone Walker

1
@GreenstoneWalker: chắc chắn rằng nó có thể : alter login sa with name = [as];.
Remus Rusanu

Remus, điều đó sẽ phục vụ tôi ngay khi dựa vào SSMS và cũng dựa vào kiến ​​thức cũ. Trước SQL Server 2005, nó không thể được đổi tên. SSMS dường như không thể đổi tên đăng nhập sa nhưng T-SQL bạn đăng là hoàn toàn chính xác.
Greenstone Walker

12

Tôi thấy hai dòng tấn công này.

  • Tuân thủ . Có bất kỳ tiêu chí tuân thủ bắt buộc có hiệu lực trong cửa hàng của bạn? Tìm kiếm cẩn thận thông qua từ ngữ của nó và xem nếu bạn tìm thấy bất cứ điều gì không tương thích với 'yêu cầu' của ứng dụng. Nếu bạn tìm thấy bất cứ điều gì ngăn chặn việc sasử dụng bởi một ứng dụng, bạn có hộp đựng nước chống đạn, vì ứng dụng đó sẽ khiến doanh nghiệp của bạn phải chịu trách nhiệm, v.v.

  • Quyền truy cập quản trị viên . Hãy chắc chắn rằng bạn trình bày rõ ràng trường hợp một ứng dụng yêu cầu saquyền truy cập có hiệu lực, nó cung cấp saquyền truy cập cho tất cả người dùng doanh nghiệp có quyền quản trị viên trên các máy trạm nơi ứng dụng được cài đặt. Không có cách nào để ẩn samật khẩu khỏi quản trị viên địa phương nơi ứng dụng chạy, đó là một thực tế và không có số lượng 'tranh giành' nào có thể ngăn chặn điều này. Không có nguồn gốc địa phương của niềm tin mà một quản trị viên địa phương không thể có được, nếu anh ta muốn. Làm rõ rằng việc có một ứng dụng yêu cầu satương đương với việc trao sađặc quyền cho tất cả người dùng đang chạy ứng dụng. Giải thích điều đó có nghĩa là gì, người dùng có thể làm gì hiệu quả:

    • khả năng đọc bất kỳ dữ liệu nào trong máy chủ, không chỉ từ ứng dụng này mà từ bất kỳ cơ sở dữ liệu nào khác được lưu trữ trên máy chủ đó
    • khả năng sửa đổi bất kỳ dữ liệu nào trên máy chủ, một lần nữa từ bất kỳ cơ sở dữ liệu nào khác trên cùng một máy chủ
    • khả năng xóa mọi dấu vết hành động của anh ta sau khi sửa đổi được thực hiện
    • khả năng thay đổi bất kỳ kiểm toán và lịch sử nào để cho thấy rằng một số hành động nhất định đã được thực hiện bởi một người dùng khác
    • khả năng sử dụng thông tin đăng nhập của SQL Server để tăng cường tấn công vào bất kỳ tài nguyên nào khác tin tưởng máy chủ này. Điều này có thể ám chỉ bất kỳ Máy chủ SQL nào khác, nhưng các tài nguyên khác cũng vậy, bao gồm nhưng không giới hạn ở chia sẻ tệp, Trao đổi máy chủ, v.v., vì Máy chủ SQL có thể được sử dụng như một bước đệm.

Làm rõ cho những người ra quyết định chấp nhận ứng dụng này ngụ ý ủy thác cho mọi nhân viên có quyền truy cập quản trị viên vào các máy trạm chạy ứng dụng với tất cả các đặc quyền được đề cập ở trên. Nhà cung cấp sẽ cố gắng bảo vệ vị thế của mình bằng cách gọi một số loại hoặc samật khẩu 'mã hóa' khác cho ứng dụng. Điều này không giữ nước. Không có sơ đồ mã hóa nào có thể chịu được một cuộc tấn công từ quản trị viên. Và làm rõ rằng số lượng kỹ năng kỹ thuật cần thiết để tìm mật khẩu 'ẩn' cục bộ là hoàn toàn không liên quan. Các nhân viên sẽ không tự làm điều đó, một trong số họ sẽ google cho nó và khám phá ra kịch bản dễ sử dụng thực hiện nó.


Cảm ơn bạn Remus. Đó chính xác là câu trả lời tôi yêu cầu. Tôi đang dần chiến thắng trong trận chiến và tất cả đều hữu ích
SQLDBAWithABeard

7

Đầu tiên, mật khẩu sa lưu trữ bản rõ? Bạn nên bỏ phiếu với ví của bạn. Bất cứ ai nghĩ rằng đó là chấp nhận được cần phải được đưa ra khỏi kinh doanh.

Đây là một anology có thể giúp bạn giải thích vấn đề: Nhân viên Alice cần truy cập vào tầng đầu tiên. Bạn có đưa cho cô ấy chìa khóa chính cho toàn bộ tòa nhà hay chỉ là chìa khóa cho tầng một? Trả lời: Bạn chỉ cho cô ấy chìa khóa tầng một. Tại sao? Bởi vì nó làm giảm cơ hội thiệt hại do tai nạn hoặc cố ý. Nếu Alice không thể đến phòng máy chủ tầng hai ở nơi đầu tiên thì cô ấy sẽ không bao giờ làm điều gì xấu ở đó.

Đó là Nguyên tắc tối thiểu.

Về lý do tại sao ứng dụng cần sử dụng tài khoản sa, đó là câu hỏi mà PerfMon hoặc Sự kiện mở rộng có thể trả lời được. Tạo theo dõi PerfMon bằng mẫu T-SQL, có thể được lọc theo tên ứng dụng.

Ngoài đầu tôi, đây là một lập luận khác chống lại việc sử dụng sa: Sử dụng tài khoản sa yêu cầu dịch vụ SQL Server ở chế độ xác thực hỗn hợp. Chỉ xác thực là tốt hơn vì chúng ta có thể tận dụng tất cả các tính năng bảo mật của Kerberos.


4

Từ góc độ kỹ thuật, không có lý do gì mà một ứng dụng cần có quyền SA. Điều có lẽ đã xảy ra là các nhà phát triển ứng dụng có thể kiểm tra xem liệu đăng nhập của họ có quyền sysadmin hay không và nếu không, nó chỉ đơn giản là ném một thông báo lỗi. Bằng cách này, họ có thể tuyên bố rằng ứng dụng yêu cầu quyền SA.

Nếu bạn phải có ứng dụng này thì tôi sẽ chạy nó trong một trường hợp riêng mà không có gì khác trên đó.


Tôi nghĩ rằng nó có thể kiểm tra nếu nó đang chạy như sa và sau đó không thành công vì nó sẽ không chạy trong tài khoản có sysadmin
SQLDBAWithABeard

1
Sau đó, nó sẽ được kiểm tra userid cụ thể. Điều lạ lùng là nhà phát triển của họ đang làm điều này bởi vì nó hoạt động với sa và họ không muốn bận tâm xem những quyền nào họ thực sự cần, vì vậy đây là cách dễ nhất để ngăn ngừa các lỗi khác. Đó là một cách tiếp cận hoàn toàn tào lao và nhà cung cấp nên bị đánh đập xung quanh để làm điều đó.
mrdenny

4

Có lẽ nhà cung cấp của bạn đang yêu cầu / yêu cầu "sa" vì ở đâu đó trong ứng dụng của họ, họ đang sử dụng XP_CMDSHELL. .

Nếu có nhu cầu chính đáng, bạn có thể cấp quyền truy cập hạn chế thông qua tài khoản proxy. Xem, ví dụ: BOL: http://msdn.microsoft.com/en-us/l Library / ms175046.aspx


4

Không có ứng dụng nên yêu cầu tài khoản SA và mật khẩu để hoạt động.

Tuy nhiên, tôi đã cài đặt một sản phẩm Quản lý Dịch vụ CNTT và trong quá trình cài đặt, bạn có tùy chọn cung cấp thông tin đăng nhập tài khoản SA để cho phép trình cài đặt tạo DB và đính kèm tài khoản vào DB để phần mềm sử dụng. Thông tin đăng nhập tài khoản SA không được lưu trong ứng dụng hoặc nhật ký trình cài đặt ở bất cứ đâu. Phần mềm này cũng cung cấp tùy chọn sử dụng cơ sở dữ liệu được tạo sẵn trong quá trình cài đặt.

Vì vậy, tôi sẽ chỉ xác nhận nếu tài khoản SA được yêu cầu để cài đặt hoặc hoạt động của phần mềm Quản lý Dịch vụ CNTT này.

Nếu Cài đặt: tạo tài khoản 'sa' tạm thời - thực hiện cài đặt - và xóa tài khoản.

Nếu hoạt động: Tránh phần mềm đó như bệnh dịch hạch. (hoặc thiết lập một máy chủ SQL độc lập sẽ chỉ chứa một cơ sở dữ liệu đó.)


+1 cho phiên bản máy chủ SQL chuyên dụng. Đó sẽ là một giải pháp thay thế cuối cùng tốt để cấp sa trên máy chủ thực.
Dan

0

Bất kỳ tham số bảo mật hệ thống SQL Server mặc định nào được cung cấp phải được sửa đổi. Bạn không nên sử dụng chế độ hỗn hợp (cho phép xác thực cả Windows và SQL Server) để xác thực. Thay vào đó, chỉ chuyển sang xác thực Windows - sẽ thực thi chính sách mật khẩu Windows - kiểm tra độ dài mật khẩu, tuổi thọ và lịch sử. Tính năng của chính sách mật khẩu Windows làm cho nó khác với xác thực Máy chủ SQL là khóa đăng nhập - sau một số lần đăng nhập thất bại liên tiếp, đăng nhập sẽ bị khóa và không thể sử dụng được để sử dụng thêm

Mặt khác, xác thực Máy chủ SQL không cung cấp bất kỳ phương pháp nào để phát hiện các nỗ lực tấn công vũ phu và tệ hơn nữa, SQL Server thậm chí còn được tối ưu hóa để xử lý số lượng lớn các nỗ lực đăng nhập nhanh. Vì vậy, nếu xác thực Máy chủ SQL là bắt buộc trong một hệ thống Máy chủ SQL cụ thể, bạn nên vô hiệu hóa đăng nhập SA


1
Đó có phải là một tai nạn hay cố ý - để trả lời 2 câu hỏi với cùng một câu trả lời chính xác?
ypercubeᵀᴹ

Cảm ơn bạn đã bình luận. Chỉ cần nghĩ rằng lời giải thích có thể giúp đỡ trong cả hai trường hợp.
Ivan Stankovic

Thú vị, nhưng không đặc biệt hữu ích cho OP.
Dan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.