-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstpChecklist_Seguranca.sql
More file actions
6687 lines (5547 loc) · 283 KB
/
stpChecklist_Seguranca.sql
File metadata and controls
6687 lines (5547 loc) · 283 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
IF OBJECT_ID('dbo.sqldba_stpSecurity_Checklist') IS NULL
EXEC ('CREATE PROCEDURE dbo.sqldba_stpSecurity_Checklist AS RETURN 0;');
GO
ALTER PROCEDURE dbo.sqldba_stpSecurity_Checklist (
@language VARCHAR(2) = 'en',
@heavy_operations BIT = 1
, @Export NVARCHAR(10) = 'Table' /*Screen/Table*/
, @ExportSchema NVARCHAR(10) = 'dbo'
, @ExportDBName NVARCHAR(20) = 'master'
, @ExportTableName NVARCHAR(50) = 'sqldba_stpSecurity_Checklist_Table'
)
AS
BEGIN
--------------------------------------------------------------------------------------------------------------------
--
-- stpSecurity_Checklist - 1.0.6 (18/01/2021)
-- Checklist de segurança para ambientes SQL Server - Mais de 80 validações de segurança!!
--
-- Precisa de ajuda para corrigir algum problema?
-- comercial@powertuning.com.br
--
--------------------------------------------------------------------------------------------------------------------
-- DECLARE @language VARCHAR(2) = 'pt', @heavy_operations BIT = 1
SET NOCOUNT ON
IF (OBJECT_ID('tempdb..#Resultado') IS NOT NULL) DROP TABLE #Resultado
CREATE TABLE #Resultado (
Id_Verificacao INT NOT NULL PRIMARY KEY,
Ds_Categoria VARCHAR(100) NULL,
Ds_Titulo VARCHAR(100) NULL,
Ds_Resultado VARCHAR(100) NULL,
Ds_Descricao VARCHAR(MAX) NULL,
Ds_Verificacao VARCHAR(MAX) NULL,
Ds_Sugestao VARCHAR(MAX) NULL,
Ds_Referencia VARCHAR(500) NULL,
Ds_Detalhes XML NULL
)
DECLARE
@Resultado XML,
@ResultadoString VARCHAR(MAX),
@Versao INT,
@Quantidade INT,
@Data DATETIME,
@IsAmazonRDS BIT = (CASE WHEN LEFT(CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS VARCHAR(8000)), 8) = 'EC2AMAZ-' AND LEFT(CAST(SERVERPROPERTY('MachineName') AS VARCHAR(8000)), 8) = 'EC2AMAZ-' AND LEFT(CAST(SERVERPROPERTY('ServerName') AS VARCHAR(8000)), 8) = 'EC2AMAZ-' THEN 1 ELSE 0 END),
@Query VARCHAR(MAX),
@Dt_Hoje DATE = GETDATE()
SET @Versao = (CASE LEFT(CONVERT(VARCHAR, SERVERPROPERTY('ProductVersion')), 2)
WHEN '8.' THEN 2000
WHEN '9.' THEN 2005
WHEN '10' THEN 2008
WHEN '11' THEN 2012
WHEN '12' THEN 2014
WHEN '13' THEN 2016
WHEN '14' THEN 2017
WHEN '15' THEN 2019
ELSE 2019
END)
SET @language = (CASE
WHEN NULLIF(LTRIM(RTRIM(@language)), '') IS NULL THEN (SELECT CASE WHEN [value] IN (5, 7, 27) THEN 'pt' ELSE 'en' END FROM sys.configurations WHERE [name] = 'default language')
ELSE @language
END)
/*Find SQL Instance name for output table*/
DECLARE @ThisServer NVARCHAR(500)
DECLARE @errMessage VARCHAR(MAX)
SET @errMessage = ERROR_MESSAGE()
BEGIN TRY
IF (select CHARINDEX('\',@@SERVERNAME)) > 0
/*Named instance will always use NetBIOS name*/
SELECT @ThisServer = @@SERVERNAME
IF (select CHARINDEX('\',@@SERVERNAME)) = 0
/*Not named, use the NetBIOS name instead of @@ServerName*/
SELECT @ThisServer = CAST( Serverproperty( 'ComputerNamePhysicalNetBIOS' ) AS NVARCHAR(500))
END TRY
BEGIN CATCH
SELECT @errMessage = ERROR_MESSAGE()
RAISERROR (@errMessage,0,1) WITH NOWAIT;
END CATCH
/*Find domain name for output table*/
DECLARE @ThisDomain NVARCHAR(100)
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\services\Tcpip\Parameters', N'Domain',@ThisDomain OUTPUT
SET @ThisDomain = ISNULL(@ThisDomain, DEFAULT_DOMAIN())
---------------------------------------------------------------------------------------------------------------
-- Idiomas
---------------------------------------------------------------------------------------------------------------
IF (@language = 'pt')
BEGIN
INSERT INTO #Resultado
(
Id_Verificacao,
Ds_Categoria,
Ds_Titulo,
Ds_Resultado,
Ds_Descricao,
Ds_Verificacao,
Ds_Sugestao,
Ds_Referencia,
Ds_Detalhes
)
VALUES
(-8, 'Avisos', 'Copyright', 'Informativo', 'stpChecklist_Seguranca 1.0', NULL, NULL, NULL, '<Detalhes><Copyright>Stored Procedure desenvolvida por Dirceu Resende</Copyright><Website>https://www.dirceuresende.com</Website></Detalhes>'),
(-7, 'Avisos', 'Versão', 'Informativo', @@VERSION, NULL, NULL, NULL, NULL),
(-6, 'Avisos', 'Informações da máquina', 'Informativo', NULL, NULL, NULL, NULL, NULL),
(-5, 'Avisos', 'Data de Inicialização', 'Informativo', NULL, NULL, NULL, NULL, NULL),
(-4, 'Avisos', 'Parâmetros de Inicialização', 'Informativo', 'Verifica os parâmetros de inicialização utilizados pela instância do SQL Server', NULL, NULL, NULL, NULL),
(-3, 'Avisos', 'Instâncias no servidor', 'Informativo', NULL, NULL, NULL, NULL, NULL),
(-2, 'Avisos', 'Instâncias rodando em CLUSTER', 'Informativo', (CASE WHEN CAST(SERVERPROPERTY('IsClustered') AS VARCHAR(10)) = '1' THEN 'SIM' ELSE 'NÃO' END), NULL, NULL, NULL, NULL),
(-1, 'Avisos', 'Ajuda', 'Informativo', 'Encontrou algum problema e precisa de ajuda? Solicite agora uma consultoria e protega seu ambiente com uma equipe de especialistas', NULL, NULL, NULL, '<Contatos><Whatsapp>https://bit.ly/dirceuresende</Whatsapp><Telegram>https://t.me/dirceuresende</Telegram><Skype>@dirceuresende</Skype><Email>contato@fabriciolima.net</Email></Contatos>'),
(0, '----------------------', '----------------------', '----------------------', '----------------------', NULL, NULL, NULL, NULL),
(
1,
'Configuração',
'Trustworthy',
NULL,
'Configuração que permite executar comandos maliciosos dentro do database e "tomar o controle" de outros databases por usuários que estão na role db_owner',
'Verifica se algum database possui a propriedade "TRUSTWORTHY" habilitado',
'Desative a propriedade "TRUSTWORTHY" de todos os databases. Caso utilize para assemblies SQLCLR, utilize chaves de criptografia',
'https://docs.microsoft.com/pt-br/sql/relational-databases/security/trustworthy-database-property?view=sql-server-2017',
NULL
),
(
2,
'Configuração',
'Auditoria de Falhas de Login',
NULL,
'Configuração que permite auditar falhas de login na instância quando usuários erram a senha. Essa configuração é recomendável estar ativada para conseguir identificar possíveis ataques de força-bruta na instância',
'Verifica se a instância está gravando no log quando o usuário erra uma senha',
'Ativar a auditoria de conexão para falhas de login',
'https://www.mssqltips.com/sqlservertip/1735/auditing-failed-logins-in-sql-server/',
NULL
),
(
3,
'Configuração',
'Autenticação Windows Apenas',
NULL,
'Configuração que permite a autenticação utilizando Segurança Integrada do Windows (mais seguro), mas também autenticação SQL Server, utilizando usuário e senha (menos seguro). Essa configuração não é exatamente um problema, pois existem aplicações legadas que requerem autenticação SQL Server, mas é uma boa prática evitar esse cenário, quando possível.',
'Verifica se a instância está permitindo conexões de logins SQL Server',
'Desativar a autenticação de logins SQL Server, quando possível',
'https://docs.microsoft.com/pt-br/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-2017',
NULL
),
(
4,
'Configuração',
'Ad hoc distributed queries',
NULL,
'Configuração que permite executar possíveis comandos remotamente através de OPENROWSET/OPENDATASOURCE. Os possíveis problemas de segurança causados por essa configuração é a possibilidade do provider conter algum bug de segurança, possibilidade de um servidor comprometido acessar dados de um servidor ainda não comprometido ou mesmo um servidor comprometido enviar de volta informações durante ataques hackers',
'Verifica se a configuração "Ad hoc distributed queries" está habilitada no sp_configure',
'Desativar a configuração "Ad hoc distributed queries" caso não esteja utilizando OPENROWSET/OPENDATASOURCE e nem o SQL Server 2005',
'https://cuttingedge.it/blogs/steven/pivot/entry.php?id=44',
NULL
),
(
5,
'Configuração',
'cross db ownership chaining',
NULL,
'Configuração que permite que uma pessoa acesse objetos que ela não tenha acesso em outro database através de cenários específicos de "cross db ownership chaining"',
'Verifica se a configuração "cross db ownership chaining" está ativa no sp_configure',
'Desative a configuração "cross db ownership chaining" caso não esteja utilizando esse recurso (sua utilização não é muito comum)',
'http://www.sqlservercentral.com/articles/Stairway+Series/123545/',
NULL
),
(
6,
'Configuração',
'Atualizações do SQL Server/Windows',
NULL,
'Essa validação identifica quando a instância está há mais de 60 dias sem ser reiniciada, indicando que atualizações de Windows e do SQL Server não estão sendo aplicados',
'Verifica a quantos dias o serviço do SQL Server está online',
'Aplique atualizações de Windows e também Service Packs e Cumulative Updates do SQL Server. Muitas atualizações são correções e pacotes de segurança',
'https://sqlserverbuilds.blogspot.com/',
NULL
),
(
7,
'Configuração',
'Databases sem verificação de página',
NULL,
'Configuração que permite que o SQL Server grave um CHECKSUM em cada página à medida que vai para o armazenamento e, em seguida, verifique o CHECKSUM novamente quando os dados são lidos do disco para tentar garantir a integridade dos dados. Isso pode gerar uma pequena sobrecarga de CPU, mas normalmente vale a pena recuperar-se da corrupção',
'Verifica se algum database está utilizando algum algoritmo de validação de página diferente do CHECKSUM (NONE ou TORN_PAGE)',
'Altere o algoritmo de validação de página de todos os databases para CHECKSUM',
'https://www.brentozar.com/blitz/page-verification/',
NULL
),
(
8,
'Configuração',
'Default trace habilitado',
NULL,
'Configuração que permite que o SQL Server colete algumas informações da instância pelo Default Trace, como alguns comandos de DDL, DCL, etc.',
'Verifica se o trace padrão do SQL Server está habilitado e executando',
'Habilite o trace padrão do SQL Server para auditar eventos',
'https://www.dirceuresende.com/blog/utilizando-o-trace-padrao-do-sql-server-para-auditar-eventos-fn_trace_gettable/',
NULL
),
(
9,
'Configuração',
'scan for startup procs',
NULL,
'Configuração que permite que uma pessoa monitore quais objetos são executados na inicialização do SQL Server e crie códigos maliciosos nesses objetos.',
'Verifica se a configuração "scan for startup procs" está habilitada na instância através da sp_configure',
'Desative essa configuração caso não esteja realizando nenhuma validação do que é executado durante a inicialização do SQL Server',
'https://docs.microsoft.com/pt-br/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option?view=sql-server-2017',
NULL
),
(
10,
'Configuração',
'DatabaseMail XPs',
NULL,
'Configuração que permite que uma pessoa envie e-mails e informações do banco para outras pessoas utilizando o DatabaseMail. Embora isso seja bastante utilizado por sistemas e alertas, você deve verificar se isso realmente é necessário na instância e se está sendo utilizado. Caso não esteja, desative essa opção.',
'Verifica se a configuração "Database Mail XPs" está habilitada na sp_configure',
'Desative essa configuração caso não tenha nenhuma rotina que envie e-mails pelo banco de dados e que não possa ser enviado pelo SSIS, por exemplo',
'https://www.sqlshack.com/securing-sql-server-surface-area/',
NULL
),
(
11,
'Configuração',
'SQL Mail XP',
NULL,
'Configuração que permite que uma pessoa envie e-mails e informações do banco para outras pessoas utilizando o SQL Mail XP (Disponível até o SQL Server 2012. Após isso, foi substituído pelo DatabaseMail). Embora isso seja bastante utilizado por sistemas e alertas, você deve verificar se isso realmente é necessário na instância e se está sendo utilizado. Caso não esteja, desative essa opção.',
'Verifica se a configuração "SQL Mail XP" está habilitada na sp_configure',
'Desative essa configuração caso não tenha nenhuma rotina que envie e-mails pelo banco de dados e que não possa ser enviado pelo SSIS, por exemplo',
'https://www.sqlshack.com/securing-sql-server-surface-area/',
NULL
),
(
12,
'Configuração',
'Remote Admin Connections (DAC)',
NULL,
'Configuração que permite que usuários administradores (sysadmin) possam logar na instância mesmo quando ela está com algum problema que impede o logon ou quando o limite de conexões da instância é atingido. Essa configuração deve ser habilitada para que seja possível utilizá-la em casos de emergência.',
'Verifica se a configuração "remote admin connections" está habilitada na sp_configure',
'Habilite a configuração "remote admin connections" na sp_configure',
'https://www.dirceuresende.com/blog/habilitando-e-utilizando-a-conexao-remota-dedicada-para-administrador-dac-no-sql-server/',
NULL
),
(
13,
'Configuração',
'Remote Access',
NULL,
'Configuração que permite que usuários executem Stored Procedures remotamente através de Linked Server, permitindo que um hacker possa utilizar uma instância comprometida para realizar ataques de DDoS em outra instância da rede. Esse parâmetro está marcado como Deprecated e caso não seja utilizado por nenhuma rotina, deve ser desativado.',
'Verifica se a configuração "remote access" está habilitada na sp_configure',
'Desabilite a configuração "remote access" caso você não utilize Stored Procedures remotamente, utilizando Linked Servers',
'https://docs.microsoft.com/pt-br/sql/database-engine/configure-windows/configure-the-remote-access-server-configuration-option?view=sql-server-2017',
NULL
),
(
14,
'Configuração',
'SMO and DMO XPs',
NULL,
'Configuração que permite que usuários programem no SQL Server utilizando linguagens de programação como C#, VB e PowerShell. Caso não esteja sendo utilizado, a boa prática é desativar esse recurso. Obs: Caso esteja utilizando o SSMS 17 para acessar o SQL Server 2005, pode ser necessário habilitar esse parâmetro para conseguir utilizar o SSMS',
'Verifica se a configuração "SMO and DMO XPs" está habilitada na sp_configure',
'Desative a configuração "SMO and DMO XPs" caso não utilize programação SMO',
'https://www.stigviewer.com/stig/microsoft_sql_server_2005_instance/2015-04-03/finding/V-15211',
NULL
),
(
15,
'Configuração',
'Server Trigger Habilitada',
NULL,
'Essa configuração valida se alguma trigger a nível de servidor está habilitada no ambiente. Esse recurso pode ser utilizado por hackers para impedir o logon de determinados usuários',
'Verifica se alguma trigger a nível de servidor está habilitada na instância',
'Valide se essa server trigger está correta e não influi em nenhum risco para os usuários',
NULL,
NULL
),
(
16,
'Configuração',
'Trace Habilitado',
NULL,
'Essa configuração valida se algum trace está habilitado no ambiente. Esse recurso permite analisar e capturar informações das consultas executadas no banco. Da mesma forma que isso pode ser utilizado para fins de auditoria, pode também ser utilizado para capturar dados sensíveis por pessoas mal intencionadas',
'Verifica se algum trace (que não o trace default) está habilitado na instância',
'Valide se esse trace realmente foi criado pelo time de DBA e não influi em nenhum risco para os usuários',
NULL,
NULL
),
(
17,
'Configuração',
'Extended Events (XE) Habilitado',
NULL,
'Essa configuração valida se algum Extended Event (XE) está habilitado no ambiente. Esse recurso permite analisar e capturar informações das consultas executadas no banco. Da mesma forma que isso pode ser utilizado para fins de auditoria, pode também ser utilizado para capturar dados sensíveis por pessoas mal intencionadas',
'Verifica se algum Extended Event (que não os padrões do SQL Server) está habilitado na instância',
'Valide se esse XE realmente foi criado pelo time de DBA e não influi em nenhum risco para os usuários',
NULL,
NULL
),
(
18,
'Configuração',
'AUTO_CLOSE desativado para bancos de dados contidos',
NULL,
'Como a autenticação de usuários para bancos de dados contidos ocorre no banco de dados e não no nível do servidor \ instância, o banco de dados deve ser aberto sempre para autenticar um usuário. A abertura / fechamento frequente do banco de dados consome recursos adicionais do servidor e pode contribuir para uma negação de serviço.',
'Verifica se algum banco de dados contido tem AUTO_CLOSE ativado.',
'Essa configuração deve ser desativada para interromper a abertura e o fechamento frequentes de conexões de bancos de dados',
'https://docs.microsoft.com/pt-br/sql/relational-databases/databases/security-best-practices-with-contained-databases?view=sql-server-2017',
NULL
),
(
19,
'Configuração',
'Número baixo de registros de erros retidos',
NULL,
'Os arquivos de log de erros do SQL Server devem ser protegidos contra perda.',
'Os arquivos de log devem ser submetidos a backup antes de serem sobrescritos. Freqüentemente, um SQL Server é reiniciado várias vezes para tentar resolver um problema. Isso faz com que o log de erros seja reciclado e você perderá informações importantes sobre a solução de problemas. Este é um item marcado do Center for Internet Security (CIS).',
'Ajuste o número de logs para evitar perda de dados. O valor padrão de 6 talvez seja insuficiente para um ambiente de produção.',
'https://www.brentozar.com/archive/2015/09/forgotten-maintenance-cycling-the-sql-server-error-log/',
NULL
),
(
20,
'Configuração',
'SQL autenticação desativado para bancos de dados contidos',
NULL,
'Os bancos de dados contidos não impõem regras de complexidade de senha para usuários autenticados pelo SQL. A ausência de uma política de senha imposta pode aumentar a probabilidade de uma credencial fraca ser estabelecida em um banco de dados contido.',
'Verifica se algum banco de dados contido tem SQL autenticação ativado.',
'Essa configuração deve ser desativada para garantir que a autenticação SQL não seja usada em bancos de dados contidos',
'https://docs.microsoft.com/pt-br/sql/relational-databases/databases/security-best-practices-with-contained-databases?view=sql-server-2017',
NULL
),
(
100,
'Segurança de Usuários',
'Falha de usuário/senha',
NULL,
'Verifica quantas tentativas de login tiveram falha por usuário e senha incorretos',
'Verifica no log do SQL Server os eventos de falha de login por senha incorreta',
'Verifique a origem dessas conexões e caso não as conheça, bloqueie o IP no Firewall. Uma boa sugestão é alterar periodicamente a senha dos usuários SQL e utilizar senhas fortes para evitar invasões',
'https://www.dirceuresende.com/blog/sql-server-como-evitar-ataques-de-forca-bruta-no-seu-banco-de-dados/',
NULL
),
(
101,
'Segurança de Usuários',
'Usuário SA',
NULL,
'Usuário padrão do SQL Server que possui a permissão mais elevada possível (sysadmin). Deve ser desativado e renomeado para evitar possíveis ataques hackers',
'Verifica se o usuário "sa" está habilitado',
'Desative o usuário "sa" e altere o nome desse usuário',
'https://www.dirceuresende.com/blog/sql-server-como-desativar-o-login-sa-minimizando-impactos/',
NULL
),
(
102,
'Segurança de Usuários',
'Usuários Órfãos',
NULL,
'Usuários que não possuem logins associados. Provavelmente algum erro de mapeamento. Esses usuários devem ser removidos ou remapeados com o respectivo login. Esse tipo de situação pode ser utilizada por hackers para tentar acessar bases que esses usuários possuem permissão',
'Verifica usuários criados nos databases e que não possuem logins associados na instância',
'Tente refazer o mapeamento com a sp_change_users_login. Caso o login realmente não exista, tenta analisar se esse usuário pode ser removido',
'https://www.dirceuresende.com/blog/identificando-e-resolvendo-problemas-de-usuarios-orfaos-no-sql-server-com-a-sp_change_users_login/',
NULL
),
(
103,
'Segurança de Usuários',
'Usuários sem políticas de troca de senha',
NULL,
'Logins SQL Server que não possuem política de senha, ou seja, a senha não expira e/ou não tem exigências de complexidade definidas. Caso seja um usuário de aplicação, esse alerta pode ser ignorado, mas caso seja login de um usuário, ele deve ser forçado a trocar a senha regularmente e ter senhas difíceis de serem quebradas',
'Verifica os logins que não possuem as opções de expiração de senha e/ou conformidade com as políticas de senha',
'Habilite as opções de "enforce password policy" e "enforce password expiration" na tela de propriedades do login',
'https://docs.microsoft.com/pt-br/sql/relational-databases/security/password-policy?view=sql-server-2017',
NULL
),
(
104,
'Segurança de Usuários',
'Usuários com senha antiga',
NULL,
'Logins SQL Server que a senha não expira e não é alterada há mais de 180 dias. Mesmo sendo um usuário de aplicação, a senha do usuário deve ser alterada regularmente para evitar possíveis ataques hackers',
'Verifica se a senha do login SQL Server não é alterada há mais de 180 dias',
'Altere a senha de todos os logins SQL Server regularmente para evitar vazamentos de senhas',
'https://docs.microsoft.com/pt-br/sql/relational-databases/security/password-policy?view=sql-server-2017',
NULL
),
(
105,
'Segurança de Usuários',
'Usuários com senha fraca',
NULL,
'Logins SQL Server que possuem senhas fracas e que foram facilmente quebradas utilizando essa Stored Procedure',
'Tenta quebrar a senha dos logins SQL utilizando a função PWDCOMPARE e uma pequena base de senhas mais comuns',
'Altere regularmente a senha dos logins SQL e utilize senhas fortes e complexas para dificultar ataques de força bruta',
'https://www.dirceuresende.com/blog/sql-server-como-identificar-senhas-frageis-vazias-ou-iguais-ao-nome-do-usuario/',
NULL
),
(
106,
'Segurança de Usuários',
'Usuários sem Permissão',
NULL,
'Usuários que não possuem nenhuma permissão no database, ou seja, devem estar criados no banco sem nenhuma necessidade. Esses usuários provavelmente podem ser excluídos do database com segurança.',
'Identifica usuários de databases que não estão em nenhuma role e nem possuem nenhuma permissão no banco',
'Analise se esses usuários podem ser removidos',
NULL,
NULL
),
(
107,
'Segurança de Usuários',
'Usuários AD sem utilizar Kerberos',
NULL,
'Identifica se o protocolo de autenticação NTLM está sendo utilizado ao invés do Kerberos, que é um protocolo mais seguro de comunicação entre servidores e permite do Double-Hop',
'Identifica usuários com autenticação AD na sys.dm_exec_connections que não estão utilizando o Kerberos',
'Analise se o SPN da instância está configurado corretamente nos registros do AD',
'https://www.dirceuresende.com/blog/sql-server-autenticacao-ad-kerberos-ntlm-login-failed-for-user-nt-authorityanonymous-logon/',
NULL
),
(
108,
'Segurança de Usuários',
'Permissão VIEW ANY DATABASE',
NULL,
'Identifica se existe algum usuário com permissão de VIEW ANY DATABASE, permitindo assim, que ele veja o nome de todos os databases da instância',
'Analisa na DMV sys.server_permissions se algum usuário com autenticação SQL tenha permissão de VIEW ANY DATABASE',
'Remova a permissão VIEW ANY DATABASE da role padrão public e de todos os usuários que não acessam o SQL Server pelo SSMS, especialmente sistemas. Utilizar o grupo do AD DOMINIO\Domain Users pode ser uma alternativa mais segura ao public',
'https://www.dirceuresende.com/blog/sql-server-como-ocultar-os-databases-para-usuarios-nao-autorizados/',
NULL
),
(
109,
'Segurança de Usuários',
'Grupos do Windows BUILTIN',
NULL,
'Por padrão, esse grupo tem direitos de administrador do sistema do SQL Server para o SQL Server quando ele é instalado. O mesmo nível de direitos padrão também é concedido ao grupo BUILTIN\Administrators no SQL Server 2005 durante a instalação.',
'Os grupos BUILTIN (Administradores, Todos, Usuários Autenticados, Convidados, etc.) geralmente contêm associações muito amplas que não atendem à melhor prática de garantir que apenas os usuários necessários tenham acesso a uma instância do SQL Server. Esses grupos não devem ser usados para qualquer nível de acesso em uma instância do Mecanismo de Banco de Dados do SQL Server.',
'O BUILTIN em grupos pode ser facilmente removido do SQL Server para evitar esse problema de segurança, mas antes você deve criar um grupo AD mais restritivo contendo apenas as contas de usuário necessárias',
'https://www.mssqltips.com/sqlservertip/1017/security-issues-with-the-sql-server-builtin-administrators-group/',
NULL
),
(
110,
'Segurança de Usuário',
'Grupos Locais do Windows',
NULL,
'Grupos locais do Windows não devem ser usados como logins para instâncias do SQL Server.',
'Permitir grupos locais do Windows como SQL Logins fornece uma brecha na qual qualquer pessoa com direitos de administrador no nível do sistema operacional (e sem direitos do SQL Server) pode adicionar usuários aos grupos locais do Windows e, assim, dar acesso a eles ou outras pessoas à instância do SQL Server.',
'O Windows local em grupos pode ser facilmente removido do SQL Server para evitar esse problema de segurança, mas antes você deve criar um grupo AD mais restritivo contendo apenas as contas de usuário necessárias.',
NULL,
NULL
),
(
111,
'Segurança de Usuário',
'Menos permissão na conta [public]',
NULL,
'public é uma função de servidor fixa especial que contém todos os logins. Diferente de outras funções de servidor fixas, as permissões podem ser alteradas para a função pública. De acordo com o princípio de menos privilégios, a função de servidor público não deve ser usada para conceder permissões no escopo do servidor, pois elas seriam herdadas por todos os usuários.',
'Todo logon do SQL Server pertence à função pública e não pode ser removido dessa função. Portanto, todas as permissões concedidas a essa função estarão disponíveis para todos os logins, a menos que tenham sido explicitamente negadas a logons específicos ou funções de servidor definidas pelo usuário.',
'Adicione as permissões estranhas encontradas nos resultados da consulta aos logins específicos nas funções de servidor definidas pelo usuário que requerem o acesso e revogam isso da função pública.',
'https://docs.microsoft.com/en-us/sql/relationaldatabases/security/authentication-access/server-level-roles#permissions-of-fixedserver-roles',
NULL
),
(
112,
'Segurança de Usuário',
'Acesso do SQL Agent Proxy para [public]',
NULL,
'A função de banco de dados público contém todos os usuários no banco de dados msdb. Os proxies do SQL Agent definem um contexto de segurança no qual uma etapa da tarefa pode ser executada.',
'A concessão de acesso a proxies do SQL Agent para a função pública permitiria que todos os usuários utilizassem o proxy que pode ter altos privilégios. Isso provavelmente quebraria o princípio de menos privilégios.',
'Revogar o acesso ao <proxyname> a partir da função pública',
'https://support.microsoft.com/en-us/help/2160741/best-practices-in-configuringsql-server-agent-proxy-account',
NULL
),
(
200,
'Programação',
'xp_cmdshell',
NULL,
'Configuração que permite executar comandos maliciosos dentro do database através do xp_cmdshell',
'Verifique se a configuração "xp_cmdshell" está habilitada na sp_configure',
'Desabilite essa configuração caso não esteja utilizando em nenhuma rotina. Caso esteja, tente utilizar outra solução, como o SQLCLR, para prover essa funcionalidade',
'http://www.sqlservercentral.com/blogs/brian_kelley/2009/11/13/why-we-recommend-against-xp-cmdshell/',
NULL
),
(
201,
'Programação',
'Ole Automation',
NULL,
'Configuração que permite executar comandos maliciosos dentro do database através de procedures OLE Automation',
'Verifique se a configuração "Ole Automation Procedures" está habilitada na sp_configure',
'Desabilite essa configuração caso não esteja utilizando em nenhuma rotina. Caso esteja, tente utilizar outra solução, como o SQLCLR, para prover essa funcionalidade',
'https://www.stigviewer.com/stig/microsoft_sql_server_2005_instance/2015-04-03/finding/V-2472',
NULL
),
(
202,
'Programação',
'SQLCLR',
NULL,
'Configuração que permite executar comandos maliciosos dentro do database através de procedures SQLCLR',
'Verifica se a configuração "clr enabled" está habilitada na sp_configure',
'Desabilite a configuração "clr enabled" caso não esteja utilizando nenhuma biblioteca SQLCLR',
'https://docs.microsoft.com/pt-br/sql/relational-databases/clr-integration/security/clr-integration-code-access-security?view=sql-server-2017',
NULL
),
(
203,
'Programação',
'SQLCLR Unsafe/External Access',
NULL,
'Configuração que permite executar comandos maliciosos dentro do database através de procedures SQLCLR com permissão Unsafe/External Access',
'Verifica se algum assembly, de algum database, foi criado com a PERMISSION_SET = UNSAFE ou EXTERNAL_ACCESS',
'Valide se essa biblioteca está realmente sendo utilizada e assine o assembly utilizando certificado de criptografia',
'https://docs.microsoft.com/pt-br/sql/relational-databases/clr-integration/security/clr-integration-code-access-security?view=sql-server-2017',
NULL
),
(
204,
'Programação',
'Scripts Externos (R, Python ou Java)',
NULL,
'Configuração que permite executar comandos maliciosos dentro do database através de scripts em linguagem R (SQL 2016), Python (SQL 2017) ou Java (SQL 2019)',
'Verifica se a configuração "external scripts enabled" está habilitada na sp_configure',
'Desabilite a configuração "external scripts enabled" caso não utilize scripts Python, R ou Java no SQL Server',
'https://www.stigviewer.com/stig/ms_sql_server_2016_instance/2018-03-09/finding/V-79347',
NULL
),
(
300,
'Segurança dos Dados',
'Transparent Data Encryption (TDE)',
NULL,
'Configuração que permite criptografar os dados do banco, backups e logs para evitar acesso indevido aos dados',
'Valida os databases que não possuem o TDE habilitado',
'Habilite o TDE nas bases do SQL Server 2008+ para criptografar os dados, logs e backups automaticamente',
'https://www.dirceuresende.com/blog/sql-server-2008-como-criptografar-seus-dados-utilizando-transparent-data-encryption-tde/',
NULL
),
(
301,
'Segurança dos Dados',
'Databases sem Backup',
NULL,
'Validação que identifica bancos de dados SEM BACKUP, o que pode causar um tragédia caso algum dado fique corrompido',
'Verifica bancos de dados que não possuem nenhum tipo de backup nos últimos 7 dias',
'Crie rotinas automáticas para backup FULL + DIFF + LOG em ambiente de produção ou backup FULL diário para ambientes não críticos',
'https://edvaldocastro.com/politicabkp/',
NULL
),
(
302,
'Segurança dos Dados',
'Backups sem Criptografia',
(CASE WHEN @Versao <= 2008 THEN 'Não suportado' WHEN NULL IS NULL THEN 'OK' ELSE 'Possível problema encontrado' END),
'Validação que identifica bancos de dados com backup sem criptografia, o que possibilita que terceiros consigam ler os dados caso eles consigam acesso os arquivos de backup',
'Verifica backups de bancos de dados sem criptografia',
'Implemente TDE no database ou altere a sua rotina de backup para criptografar os backups',
'https://www.tiagoneves.net/blog/criando-um-backup-criptografado-no-sql-server/',
NULL
),
(
303,
'Segurança dos Dados',
'Recovery Model FULL sem Backup de LOG',
NULL,
'Validação que identifica bancos de dados com recovery model definido como FULL, mas sem rotina de backup de log configurada, o que provavelmente é uma configuração incorreta ou falta de rotina de backup',
'Verifica bancos de dados com recovery model FULL, mas sem rotina de backup de log',
'Implemente uma rotina automática de backup de log ou altere o Recovery Model para SIMPLE, caso não seja um ambiente crítico e dados após o último possam ser perdidos em caso de falha',
'https://www.brentozar.com/blitz/full-recovery-mode-without-log-backups/',
NULL
),
(
304,
'Segurança dos Dados',
'Extensão dos arquivos dos databases',
NULL,
'Essa configuração valida se o SQL Server está utilizando as extensões padrão para arquivo de dados, logs e backups, que são alvos de Ransomwares, como o WannaCry',
'Verifica se os databases do SQL Server estão utilizando as extensão padrão para arquivos de dados (MDF) e logs (LDF)',
'Utilize extensões personalizadas para os arquivos de dados, logs e backups, dificultando que vírus e ransonwares ataquem os arquivos de database do SQL Server',
'https://www.dirceuresende.com/blog/sql-server-como-evitar-e-se-proteger-de-ataques-de-ransomware-como-wannacry-no-seu-servidor-de-banco-de-dados/',
NULL
),
(
305,
'Segurança dos Dados',
'Extensão dos arquivos de backup',
NULL,
'Essa configuração valida se o SQL Server está utilizando as extensões padrão para arquivo de backup do banco, que são alvos de Ransomwares, como o WannaCry',
'Verifica se os databases do SQL Server estão utilizando as extensão padrão para arquivos de backup (BAK)',
'Utilize extensões personalizadas para os arquivos de backups, dificultando que vírus e ransonwares ataquem os arquivos de backup do SQL Server',
'https://www.dirceuresende.com/blog/sql-server-como-evitar-e-se-proteger-de-ataques-de-ransomware-como-wannacry-no-seu-servidor-de-banco-de-dados/',
NULL
),
(
306,
'Segurança dos Dados',
'Armazenamento dos Backups',
NULL,
'Essa configuração valida se o SQL Server está configurado para utilizar outro destino de backup que não seja apenas o disco',
'Verifica se os databases do SQL Server estão utilizando soluções alternativas para armazenamento dos arquivos de backup, como nuvem e/ou fita',
'Utilize mais de um local para armazenar seus arquivos de backup do SQL Server, pois caso você armazene em um local físico apenas, você pode perder todos os casos em caso de catástrofe',
'https://www.dirceuresende.com/blog/sql-server-como-evitar-e-se-proteger-de-ataques-de-ransomware-como-wannacry-no-seu-servidor-de-banco-de-dados/',
NULL
),
(
400,
'Permissões',
'Permissão CONTROL SERVER',
NULL,
'Permissão elevada que permite controlar e até mesmo, desligar a instância SQL Server',
'Verifica usuários com permissão de CONTROL SERVER ou permissões elevadas na instância',
'Remova as permissões elevadas desses usuários, caso não sejam DBAs e as permissões sejam realmente necessárias e justificáveis',
'https://www.stigviewer.com/stig/microsoft_sql_server_2012_database_instance/2017-04-03/finding/V-41268',
NULL
),
(
401,
'Permissões',
'Usuários nas roles sysadmin/securityadmin',
NULL,
'Permissão elevada que permite executar comandos como outro login, controlar e até mesmo, desligar a instância SQL Server',
'Verifica os usuários que estão nas server roles sysadmin e/ou securityadmin',
'Remova esses usuários dessas duas roles caso não sejam DBAs e seja realmente necessário e justificável que esses usuários estejam nessas roles',
'https://renatomsiqueira.com/category/security/roles-security/',
NULL
),
(
402,
'Permissões',
'IMPERSONATE ANY LOGIN',
NULL,
'Permissão que possibilita que um determinado login possa executar comandos como QUALQUER USUÁRIO, inclusive, um usuário sysadmin',
'Verifica os usuários que possuem a permissão "IMPERSONATE ANY LOGIN" na instância',
'Remova essa permissão desses usuários',
'https://www.dirceuresende.com/blog/sql-server-como-utilizar-o-execute-as-para-executar-comandos-como-outro-usuario-impersonate-e-como-impedir-isso/',
NULL
),
(
403,
'Permissões',
'IMPERSONATE LOGIN',
NULL,
'Permissão que possibilita que um determinado login possa executar comandos como determinados logins da instância. Verificar se os login impersonáveis possuem permissões elevadas',
'Verifica os usuários que possuem a permissão "IMPERSONATE LOGIN" na instância',
'Remova essa permissão dos usuários, a não ser que exista algum motivo plausível que justifique que um login para executar comandos como outra pessoa',
'https://www.dirceuresende.com/blog/sql-server-como-utilizar-o-execute-as-para-executar-comandos-como-outro-usuario-impersonate-e-como-impedir-isso/',
NULL
),
(
404,
'Permissões',
'IMPERSONATE LOGIN em logins sysadmin/securityadmin',
NULL,
'Permissão que possibilita que um determinado login possa executar comandos como determinados logins da instância em usuários com permissões elevadas (securityadmin/sysadmin/CONTROL SERVER/IMPERSONATE ANY LOGIN)',
'Identifica usuários com privilégio de "IMPERSONATE LOGIN" em contas de usuários que são sysadmin/security admin ou possuem privilégios elevados',
'Remova essa permissão de IMPERSONATE LOGIN" desses usuários',
'https://www.dirceuresende.com/blog/sql-server-como-utilizar-o-execute-as-para-executar-comandos-como-outro-usuario-impersonate-e-como-impedir-isso/',
NULL
),
(
405,
'Permissões',
'db_owner e db_securityadmin',
NULL,
'Permissão que possibilita que um determinado usuário possa executar qualquer ação em um database específico',
'Verifica em todos os databases, quem são os usuários nas roles db_owner e db_securityadmin',
'Remova esses usuários dessas database roles e analise como substituí-las, como uma db_ddladmin, por exemplo, ou outra role com ainda menos permissões',
'https://docs.microsoft.com/pt-br/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-2017',
NULL
),
(
406,
'Permissões',
'IMPERSONATE USER',
NULL,
'Permissão que possibilita que um determinado usuário possa executar ações como se fosse outro usuário',
'Verifica em todos os databases quais são os usuários que possuem permissão de "IMPERSONATE USER"',
'Remove essa permissão dos usuários caso não haja nenhuma justificativa válida para um usuário executar comandos no database como se fosse outra pessoa',
'https://www.dirceuresende.com/blog/sql-server-como-utilizar-o-execute-as-para-executar-comandos-como-outro-usuario-impersonate-e-como-impedir-isso/',
NULL
),
(
407,
'Permissões',
'Role PUBLIC com permissões',
NULL,
'Validação que garante que a role PUBLIC não tem nenhuma permissão elevada na instância, já que todos os usuários da instância estão nessa role automaticamente. Todas as permissões que essa role possuir, podem ser utilizadas por QUALQUER usuário da instância.',
'Verifica em todos os databases e na instância, todas as permissões que a role PUBLIC possui',
'Remova todas as permissões da role public',
'https://basitaalishan.com/2013/04/04/the-public-role-do-not-use-it-for-database-access/',
NULL
),
(
408,
'Permissões',
'Usuário GUEST com permissões',
NULL,
'Validação que garante que o usuário GUEST não tem nenhuma permissão na instância. Esse usuário especial permite acesso a qualquer login que não tenha usuário mapeado em um database e por isso, deve ter o privilégio de CONNECT revogado em todos os databases',
'Verifica se o usuário GUEST possui alguma permissão na instância',
'Remova todas as permissões do usuário GUEST que não seja CONNECT nas databases msdb, master e tempdb',
'https://basitaalishan.com/2012/08/28/sql-server-guest-user-still-a-serious-security-threat/',
NULL
),
(
409,
'Permissões',
'Usuários com permissão UNSAFE/EXTERNAL ASSEMBLY',
NULL,
'Permissão que possibilita que um determinado login possa criar assemblies com o modo de segurança UNSAFE/EXTERNAL ACCESS no ambiente',
'Verifica os usuários que possuem permissões a nível de servidor "XU" (UNSAFE ASSEMBLY) e "XA" (EXTERNAL ACCESS ASSEMBLY)',
'Remova essas permissões caso esses usuários não precisem fazer deploy de assemblies SQLCLR nesses 2 modos de segurança',
'http://www.sqlservercentral.com/articles/Stairway+Series/112888/',
NULL
),
(
410,
'Permissões',
'Permissões em Extended Procedures (xp_%)',
NULL,
'Permissão que possibilita que um determinado login possa utilizar Extended Procedures na instância, que são comandos que podem ler/gravar informações do registro do Windows, além de várias outras tarefas que podem causar risco para o ambiente',
'Verifica os usuários que possuem permissões em objetos de sistema que comecem com xp_%',
'Remova essas permissões',
'https://www.stigviewer.com/stig/microsoft_sql_server_2005_instance/2015-06-16/finding/V-2473',
NULL
),
(
500,
'Vulnerabilidades em Código',
'Objetos com IMPERSONATE',
NULL,
'Verificação de procura por objetos (Stored Procedures, Functions, etc) que são executados como outro usuário que não o executor da Procedure',
'Verifica no código-fonte de todos os objetos, de todos os databases, os que objetos que são executados com as permissões de um usuário fixo (IMPERSONATE)',
'Remova o comando "EXECUTE AS" da declaração desses objetos, caso não seja necessário',
'https://www.dirceuresende.com/blog/sql-server-como-utilizar-o-execute-as-para-executar-comandos-como-outro-usuario-impersonate-e-como-impedir-isso/',
NULL
),
(
501,
'Vulnerabilidades em Código',
'Objetos com Query Dinâmica',
NULL,
'Verificação de procura por objetos (Stored Procedures, Functions, etc) que possuem execução de códigos com query dinâmica, permitindo ataques como SQL Injection em suas aplicações e execução de códigos maliciosos',
'Verifica no código-fonte de todos os objetos, de todos os databases, os que objetos que utilizam query dinâmica e que são o provável motivo dessa configuração estar habilitada',
'Remova o uso de query dinâmica sempre que possível. Quando não for possível, valide o uso da query dinâmica para garantir que os parâmetros de entrada estão sendo tratados e que não são vulneráveis a ataques de SQL Injection',
'https://www.dirceuresende.com/blog/sql-server-como-evitar-sql-injection-pare-de-utilizar-query-dinamica-como-execquery-agora/',
NULL
),
(
502,
'Vulnerabilidades em Código',
'Objetos utilizando xp_cmdshell',
NULL,
'Verificação de procura por objetos (Stored Procedures, Functions, etc) que possuem execução de códigos utilizando xp_cmdshell, permitindo que um usuário com acesso à essa SP possa executar qualquer comando que o usuário do serviço do SQL Server tenha acesso',
'Verifica no código-fonte de todos os objetos, de todos os databases, os que objetos que utilizam xp_cmdshell e que são o provável motivo dessa configuração estar habilitada',
'Remova o uso de comandos xp_cmdshell. Ao invés dele, opte por SQLCLR ou pacotes do SSIS',
'https://hydrasky.com/network-security/mssql-server-injection-tutorial/',
NULL
),
(
503,
'Vulnerabilidades em Código',
'Objetos utilizando OLE Automation',
NULL,
'Verificação de procura por objetos (Stored Procedures, Functions, etc) que possuem execução de códigos utilizando OLE Automation Procedures, que são conhecidas por possíveis memory dumps, vazamentos de memória e acessos externos diversos, como escrever arquivos, enviar requisições HTTP, etc.',
'Verifica no código-fonte de todos os objetos, de todos os databases, os que objetos que utilizam OLE Automation e que são o provável motivo dessa configuração estar habilitada',
'Remova o uso de comandos OLE Automation. Ao invés dele, opte por SQLCLR ou pacotes do SSIS',
'https://visualstudiomagazine.com/articles/2005/09/01/when-to-use-sqlclr-and-when-not-to.aspx',
NULL
),
(
504,
'Vulnerabilidades em Código',
'Procedures Executadas Automaticamente',
NULL,
'Verificação de procura por objetos que são executados automaticamente na inicialização do SQL Server, o que pode ser utilizado por invasores para executar códigos maliciosos toda vez que o serviço for iniciado',
'Verifica na DMV sys.procedures de todos os databases, quais procedures possuem a propriedade is_auto_executed = 1',
'Remova essas SPs da inicialização do SQL Server utilizando a SP sp_procoption ou dropando e recriando essa SP',
'http://blogs.lessthandot.com/index.php/datamgmt/datadesign/list-all-stored-procedures-that/',
NULL
),
(
505,
'Vulnerabilidades em Código',
'Objetos utilizando GRANT',
NULL,
'Verificação de procura por objetos (Stored Procedures, Functions, etc) que possuem execução de códigos utilizando comandos de GRANT, liberando permissões que podem ser perigosas no ambiente, especialmente se estiver dentro de jobs e rotinas automáticas',
'Verifica no código-fonte de todos os objetos, de todos os databases, os que objetos que utilizam comandos de GRANT para liberar permissões',
'Remova o uso de comandos GRANT de objetos',
NULL,
NULL
),
(
506,
'Vulnerabilidades em Código',
'Linked Server com usuário Fixo',
NULL,
'Verificação de procura por Linked Servers que utilizam um usuário fixo ao invés do usuário atual',
'Verifica nas DMVs sys.servers e sys.linked_logins se existe Linked Server com usuário fixo (uses_self_credential = 0)',
'Se possível, troque a autenticação do Linked Server pelo usuário atual da conexão',
NULL,
NULL
),
(
600,
'Instalação',
'Porta Padrão (1433)',
NULL,
'Essa verificação valida se o SQL Server está utilizando a porta padrão (1433) para conexões. Utilizar a porta padrão pode significar um risco de segurança, pois é a primeira porta que qualquer hacker tentaria invadir num possível ataque',
'Verifica se o SQL Server está utilizando a porta padrão (1433) para conexões',
'Altere a porta do SQL Server para algum porta diferente do padrão, a fim de prover mais uma camada de segurança, dificultando ataques hackers',
'https://thomaslarock.com/2016/12/using-non-default-ports-for-sql-server/',
NULL
),
(
601,
'Instalação',
'SQL Browser executando com apenas 1 instância',
NULL,
'Essa configuração valida se o SQL Browser está sendo executado em ambientes com apenas 1 instância, o que não justifica a execução desse serviço, que serve para fornecer informações das instâncias instaladas no servidor e pode facilitar ataques maliciosos ao expor os nomes das instâncias na rede. Caso essa instância não faça parte de um cluster, analise se o serviço pode ser desativado e se portas customizadas estão sendo utilizadas.',
'Verifica se o SQL Browser está sendo executado em ambientes com apenas 1 instância',
'Desabilite o SQL Browser caso você esteja utilizando a instância padrão do SQL Server OU se na string de conexão você já utiliza o formato "SERVIDOR\INSTANCIA,PORTA"',
'https://www.stigviewer.com/stig/ms_sql_server_2014_instance/2016-11-16/finding/V-70623',
NULL
),
(
602,
'Instalação',
'Nome da instância exposta na rede',
NULL,
'Essa configuração valida se o nome da instância está exposta na rede, permitindo que ela seja listada através da opção "Browse.." do SQL Server Management Studio (SSMS)',
'Verifica se o parâmetro HideInstance está ativado no SQL Configuration Manager',
'Ative o parâmetro "Hide Instance" dessa instância no SQL Configuration Manager, abaixo de "SQL Server Network Configuration" -> "Protocols for <Sua Instancia>"',
'https://www.mytechmantra.com/LearnSQLServer/How_to_Hide_an_Instance_of_SQL_Server.html',
NULL
),
(
603,
'Instalação',
'Usuário dos Serviços de SQL',
NULL,
'Essa configuração valida os usuários utilizados para iniciar os serviços do SQL Server. A recomendação é que sejam utilizados usuários do AD, para que a manutenção desses usuários seja fácil pelo time de Infra. Usuários locais não devem ser utilizados, pois ele possuem permissões elevadas nos diretórios do SO',
'Verifica se os usuários utilizados pelos serviços são os usuários padrão do SQL Server',
'Altere o usuário dos serviços SQL por usuários do AD, com permissões restritas, caso seu servidor precise de acesso à rede ou a outros servidores. Caso contrário, utilize a conta Local User Account',
'https://sqlcommunity.com/best-practices-for-sql-server-service-account/',
NULL
),
(
604,
'Instalação',
'SQL Server em Windows com versão antiga ou pessoal',
NULL,
'Essa configuração valida se o SQL Server está instalado em uma versão desatualizada do Windows Server ou se está instalado numa versão pessoal do Windows',
'Verifica a versão do Windows para identificar se está utilizando a versão mais recente do Windows Server',
'Utilize sempre a versão mais recente do Windows Server para garantir a utilização de novas recursos e correções de segurança',
'https://www.microsoft.com/pt-br/cloud-platform/windows-server',
NULL
),
(
605,
'Instalação',
'Versão do SQL Server não suportada',
NULL,
'Essa configuração valida se o SQL Server possui uma versão que ainda tem suporte e atualizações pela Microsoft',
'Verifica a versão do SQL Server ainda é suportada pela Microsoft',
'Atualize a versão do SQL Server para receber atualizações de segurança e utilizar novos recursos',
'https://www.microsoft.com/pt-br/sql-server/sql-server-downloads',
NULL
),
(
606,
'Instalação',
'SQL Server desatualizado',
NULL,
'Essa configuração valida se o SQL Server está instalado com a última versão dos Service Pack e Cumulative Updates disponíveis. Estar sempre atualizado é importante para a segurança, pois garante que falhas críticas estejam sempre atualizadas e corrigidas',
'Verifica se o build mais recente do SQL Server é o mesmo do build instalado',
'Utilize sempre a versão mais recente SQL Server e o mantenha atualizado com a última versão do Service Pack e Cumulative Updates',
NULL,
NULL
),
(
607,
'Instalação',
'Databases públicas instaladas',
NULL,
'Essa configuração valida se algum dos databases públicos são instalados na instância, servindo como uma possível porta de entrada para ataques, já que sua estrutura é amplamente conhecida',
'Verifica se os databases pub, Northwind, AdventureWorks, AdventureWorksLT, AdventureWorksDW, WideWorldImporters ou WideWorldImportersDW estão instalados',
'Caso seja uma base de produção, remova esses databases e crie-os em instâncias de testes/desenvolvimento',
'https://www.stigviewer.com/stig/ms_sql_server_2014_instance/2017-11-30/finding/V-67817',
NULL
),
(
608,
'Instalação',
'Protocolos de rede não necessários',
NULL,
'Essa configuração valida quais os protocolos de rede sendo utilizados na instância. Por padrão, o protocolo TCP/IP é o único necessário, enquanto o Shared Memory é indicado para conexões feita no próprio servidor, e o Named Pipes é uma conexão que deve ser utilizada quando ocorrem problemas no TCP/IP',
'Verifica se quais os protocolos de rede utilizados na sys.dm_exec_connections',
'Desative os protocolos de rede que não são estritamente necessários, como o VIVA, Named Pipes e Shared Memory',
'https://blogs.msdn.microsoft.com/securesql/2018/03/the-sql-server-defensive-dozen-part-1-hardening-sql-network-components/',
NULL
),
(
609,
'Instalação',
'Windows Firewall desativado',
NULL,
'Essa configuração valida se o Firewall do Windows está ativado no servidor',
'Verifica no registro do Windows se o Firewall está ativo',
'Verifique se existe outro software de Firewall no servidor. Caso não tenha, ative o Firewall do Windows',
NULL,
NULL
)
END
ELSE IF (@language = 'en')
BEGIN
INSERT INTO #Resultado
(
Id_Verificacao,
Ds_Categoria,
Ds_Titulo,
Ds_Resultado,
Ds_Descricao,
Ds_Verificacao,
Ds_Sugestao,
Ds_Referencia,
Ds_Detalhes
)
VALUES
(-8, 'Information', 'Copyright', 'Info', 'stpSecurity_Checklist 1.0', NULL, NULL, NULL, '<Details><Copyright>Stored Procedure developed by Dirceu Resende</Copyright><Website>https://www.dirceuresende.com</Website></Details>'),
(-7, 'Information', 'Version', 'Info', @@VERSION, NULL, NULL, NULL, NULL),
(-6, 'Information', 'Server info', 'Info', NULL, NULL, NULL, NULL, NULL),
(-5, 'Information', 'Startup time', 'Info', NULL, NULL, NULL, NULL, NULL),
(-4, 'Information', 'Startup parameters', 'Info', 'Checks SQL Server startup parameters in use by this instance', NULL, NULL, NULL, NULL),
(-3, 'Information', 'Instances on the server', 'Info', NULL, NULL, NULL, NULL, NULL),
(-2, 'Information', 'Instance is part of a Cluster', 'Info', (CASE WHEN CAST(SERVERPROPERTY('IsClustered') AS VARCHAR(10)) = '1' THEN 'YES' ELSE 'NO' END), NULL, NULL, NULL, NULL),
(-1, 'Information', 'Help', 'Info', 'Did you find an issue in your SQL Server instance and need our help to fix it? Get in touch and protect your instance(s) with an Expert team', NULL, NULL, NULL, '<Contacts><Whatsapp>https://bit.ly/dirceuresende</Whatsapp><Telegram>https://t.me/dirceuresende</Telegram><Skype>@dirceuresende</Skype><Email>contato@fabriciolima.net</Email></Contacts>'),
(0, '----------------------', '----------------------', '----------------------', '----------------------', NULL, NULL, NULL, NULL),
(
1,
'Configurations',
'Trustworthy',
NULL,
'Configuration that allows you to execute malicious commands inside the database and "take control" of other databases by users who are in db_owner role',
'Checks if any database has the "TRUSTWORTHY" property enabled',
'Disable the "TRUSTWORTHY" property of all databases. If you use SQLCLR assemblies, use encryption keys instead of "Trustworthy"',
'https://docs.microsoft.com/en-us/sql/relational-databases/security/trustworthy-database-property?view=sql-server-2017',
NULL
),
(
2,
'Configurations',
'Login Failure Audit',
NULL,
'Configuration that allows auditing of login failures in the instance when users miss the password. This setting is recommended to be enabled to be able to identify possible brute-force attacks on the instance',
'Checks whether the instance is writing to the log when the user misses a password',
'Enable connection auditing for login failures',
'https://www.mssqltips.com/sqlservertip/1735/auditing-failed-logins-in-sql-server/',
NULL
),
(
3,
'Configurations',
'Windows Authentication Only',
NULL,
'Configuration that allows authentication using Windows Integrated Security (more secure), but also SQL Server authentication, using user and password (less secure). This configuration is not exactly a problem because there are legacy applications that require SQL Server authentication, but it is a good practice to avoid this scenario when possible.',
'Checks whether the instance accepts connections using SQL Server authentication',
'Disable SQL Server login authentication when possible',
'https://docs.microsoft.com/en-us/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-2017',
NULL
),
(
4,
'Configurations',
'Ad hoc distributed queries',
NULL,
'Configuration that allows to execute commands remotely through OPENROWSET / OPENDATASOURCE. The possible security issue caused by this configuration is allow a compromised server accessing data from another server or even a compromised server sending back information during hacker attacks',
'Checks whether the "Ad hoc distributed queries" setting is enabled in sp_configure',
'Disable the "Ad hoc distributed queries" configuration if you are not using OPENROWSET / OPENDATASOURCE and neither SQL Server 2005',
'https://cuttingedge.it/blogs/steven/pivot/entry.php?id=44',
NULL
),
(
5,