Archive

Archive for fevereiro \11\UTC 2012

Não é possível acessar um site HTTPS específico – TLS Encrypted Alert – illegal_parameter(47)

11 de fevereiro de 2012 Deixe um comentário

Problema
=================================

– Não é possível acessar o site https://www.exemplo.com.br através do TMG Server.

Resolução
=================================

– Quando tentamos realizar o acesso ao site através do TMG, o site não era carregado. A página ficava em branco.

– Como de costume, o cliente informou que se o acesso fosse realizado de outra máquina sem passar pelo TMG, o problema não ocorria.

– No log do TMG, filtramos pelo IP do cliente e não foi possível encontrar nada relevante.

– Coletamos o Netmon na máquina cliente que estava realizando o acesso. Como podemos ver abaixo, o SSL handshake não está sendo completado por isso a página não é carregada:

1715 2:42:52 PM 1/27/2012 55.7602103 192.168.0.134      201.XXX.XXX.XXX TCP TCP:Flags=……S., SrcPort=1099, DstPort=HTTPS(443),
1717 2:42:52 PM 1/27/2012 55.8539603 201.XXX.XXX.XXX 192.168.0.134 TCP TCP:Flags=…A..S., SrcPort=HTTPS(443),
1718 2:42:52 PM 1/27/2012 55.8539603 192.168.0.134      201.XXX.XXX.XXX TCP TCP:Flags=…A…., SrcPort=1099, DstPort=HTTPS(443),
1719 2:42:52 PM 1/27/2012 55.8539603 192.168.0.134 201.XXX.XXX.XXX TLS TLS:TLS Rec Layer-1 HandShake: Client Hello
1728 2:42:52 PM 1/27/2012 56.1820853 201.XXX.XXX.XXX 192.168.0.134 TLS TLS:TLS Rec Layer-1 Encrypted Alert
1731 2:42:52 PM 1/27/2012 56.1977103 201.XXX.XXX.XXX 192.168.0.134 TLS TLS:TLS Rec Layer-1 Encrypted Alert

– Se expandirmos o pacote 1728 conseguimos ver mais detalhes do erro:

Frame: Number = 1728, Captured Frame Length = 61, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-1F-D0-F3-63-56],SourceAddress:[00-1B-21-9E-A7-27]
+ Ipv4: Src = 201.16.234.41, Dest = 192.168.0.3, Next Protocol = TCP, Packet ID = 65289, Total IP Length = 47
+ Tcp: Flags=…AP…, SrcPort=HTTPS(443), DstPort=1099, PayloadLen=7, Seq=1745586695 – 1745586702, Ack=2332138847, Win=49368 (scale factor 0x0) = 49368
TLSSSLData: Transport Layer Security (TLS) Payload Data
– TLS: TLS Rec Layer-1 Encrypted Alert
– TlsRecordLayer: TLS Rec Layer-1 Encrypted Alert
ContentType: Encrypted Alert
– Version: TLS 1.0
Major: 3 (0x3)
Minor: 1 (0x1)
Length: 2 (0x2)
EncryptedData: Binary Large Object (2 Bytes)

– Abaixo temos os dados do TLS handshake em Hexa. (Não está encriptado ainda, pois o SSL handshake ainda não foi concluído.)

00 1F D0 F3 63 56 00 1B 21 9E A7 27 08 00 45 00 00 2F FF 09 40 00 33 06 D4 D9 C9 10 EA 29 C0 A8 00 03 01 BB 04 4B 68 0B 8A 07 8B 01 9D 5F 50 18 C0 D8 13 88 00 00 15 03 01 00 02 02 2F

– Os 2 últimos Bytes dos dados em Hexa, representam o Alerta.
– Convertendo o 2F em Decimal temos 47.

– Se abrirmos a RFC do TLS 1.0 e procurarmos por AlertDescription vamos encontrar a tabela a seguir:
http://www.ietf.org/rfc/rfc2246.txt

unexpected_message(10),
bad_record_mac(20),
decryption_failed(21),
record_overflow(22),
decompression_failure(30),
handshake_failure(40),
bad_certificate(42),
unsupported_certificate(43),
certificate_revoked(44),
certificate_expired(45),
certificate_unknown(46),
illegal_parameter(47),
unknown_ca(48),
access_denied(49),
decode_error(50),
decrypt_error(51)

– O acesso está falhando, pois o Web Server não está reconhecendo algum parâmetro enviado pelo cliente, e retorna a mensagem de illegal_parameter(47).

– Após pesquisar sobre esse alerta, encontrei o KB http://support.microsoft.com/kb/980436
– Esse KB é para corrigir uma vulnerabilidade do protocolo TLS. Isso NÃO é um problema do Windows, e sim do TLS. E TODOS os fabricantes já disponibilizaram uma correção para isso como pode ser visto na lista abaixo:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555

– Ao instalar esse KB na máquina cliente, quando a máquina faz uma requisição TLS, no primeiro pacote enviado, que é o “ClientHello”, ela envia o parâmetro Transport Layer Security (TLS) Renegotiation Indication Extension. Muitos servidores que não tem essas atualizações não conseguem interpretar esse tipo de requisição e retornam essa mensagem de Encrypted Alert fazendo com que a conexão se encerre.

WORKAROUND:
=============================

– Para contornar isso seguimos o procedimento do KB http://support.microsoft.com/kb/980436 e configuramos a máquina cliente para que ela não envie o parâmetro “Transport Layer Security (TLS) Renegotiation Indication Extension”. Isso é um Workaround, já que o real problema é o servidor não suportar essa extensão do TLS e como o WebServer roda em Linux, eles não pretendem instalar a atualização. rs

Obs: Perguntei para o cliente como que ele fez o acesso sem passar pelo TMG e tinha funcionado. Ele respondeu que quando estava acessando sem passar pelo TMG, estava usando uma máquina cliente em Linux. Como essa máquina também não tinha a atualização de segurança do TLS, o acesso ocorria normalmente.

– Esse é só mais um caso em que pudemos constatar que muitos dos administradores Linux não tem o hábito de instalar atualizações de segurança, e nesse caso está causando incompatibilidades com outros sistemas. Sem contar a brecha de segurança do site e para o cliente.

– E mais uma vez, a culpa não era do ISA/TMG. 🙂

Erro 1085 ao aplicar GPO – Error: Windows failed to apply the Scripts settings.

11 de fevereiro de 2012 2 comentários

Problema
======================================

  • Ao aplicar as GPOs o evento 1085 é gerado no Event Viewer.

Log Name: System
Source: Microsoft-Windows-GroupPolicy
Date: 19/01/2012 13:08:07
Event ID: 1085
Task Category: None
Level: Warning
User: SYSTEM
Computer: xxxxxxxx
Description:
Windows failed to apply the Scripts settings. Scripts settings might have its own log file.

Resolução
========================================

  • Nesse chamado, o cliente tinha dezenas de GPOs sendo aplicadas.
  • Segundo o cliente, todos os scripts das GPOs aparentemente estavam sendo aplicados com sucesso. Eles não haviam notado nenhum script que não estivesse sendo aplicado.

–     O primeiro passo foi habilitar o log de GPO conforme abaixo:

http://blogs.technet.com/b/mempson/archive/2010/01/10/userenvlog-for-windows-vista-2008-win7.aspx

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\

New key: Diagnostics

Inside this key:

Value Name: GPSvcDebugLevel

Value Type: REG_DWORD

Value Data: 30002 (hex)

Output: %windir%\debug\usermode\gpsvc.log

– Após algumas pesquisas, encontrei documentos dizendo que esse erro pode ser gerado no caso de a GPO ter a extensão de scripts nos parâmetros da GPO mas não ter nenhum script configurado.

– Toda vez que adicionamos um script de logon ou de startup em uma GPO, é adicionado uma extensão nessa GPO para informar ao Sistema Operacional que essa GPO tem um script para ser executado.

– No log GPSVC.log, localizamos todas as GPOs que tinham a “extensão de scripts” que é representado pela GUID {42B5FAAE-6536-11D2-AE5A-0000F87571E3}

Identifying Group Policy Client-Side Extensions

http://support.microsoft.com/kb/216357/en-us

– Foram encontradas 4 GPOs com essa extensão. Isso significa que essas 4 GPOs deveriam ter um script anexado. Segue abaixo o exemplo de uma dessas GPOs e como localizar a extensão:

GPSVC(440.574) 10:30:47:454 ProcessGPO: ==============================
GPSVC(440.574) 10:30:47:454 ProcessGPO: Searching <cn={E0622561-6CA5-4E18-98B6-C97A4168D8D4},cn=policies,cn=system,DC=Domain,DC=local>
GPSVC(440.574) 10:30:47:454 ProcessGPO: Machine has access to this GPO.
GPSVC(440.574) 10:30:47:454 ProcessGPO: GPO passes the filter check.
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found functionality version of: 2
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found file system path of: \\Domain.local\SysVol\bc\Policies\{E0622561-6CA5-4E18-98B6-C97A4168D8D4}
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found common name of: <{E0622561-6CA5-4E18-98B6-C97A4168D8D4}>
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found display name of: <Nome_da_GPO>
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found machine version of: GPC is 12, GPT is 12
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found flags of: 1
GPSVC(440.574) 10:30:47:454 ProcessGPO: Found extensions: [{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{D02B1F72-3407-48AE-BA88-E8213C6761F1}][{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]
GPSVC(440.574) 10:30:47:454 ProcessGPO: ==============================

– Após encontrar essas 4 GPOs que continham a Extensão para Scripts, rodei o comando GPResult /Z para verificar quais scripts estavam sendo executados e em qual das GPOs estavam vinculados.

– No Gpresult, somente 3 GPOs tinham scripts configurados:

Startup Scripts
—————
GPO: GPO1
Name: Script1.bat

GPO: GPO2
Name: Script2.bat

Logon Scripts
————-
GPO: GPO3
Name: Script3.bat

– Isso significa que uma das GPOs tem a “extensão para scripts” {42B5FAAE-6536-11D2-AE5A-0000F87571E3}, mas atualmente, não tem um script configurado.

– Localizamos essa GPO e abrimos o GPMC. E essa GPO realmente não tinha um Script. Nem Startup Script nem Logon Script.

– Acessamos o AdsiEdit.msc e acessamos Domain NC -> CN=System -> CN=Policies, localizamos o ID da GPOs e clicamos para editar.

– Removemos a GUID [{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}] do atributo gPCMachineExtensionNames.

– Forçamos a replicação dos DCs com o comando: Repadmin /syncall /eAPDq

– Após isso, rodamos o comando Gpupdate /force e o erro 1085 não foi mais gerado.

Artigos relacionados
====================

Identifying Group Policy Client-Side Extensions
http://support.microsoft.com/kb/216357/en-us

Userenvlog for Windows Vista/2008/Win7
http://blogs.technet.com/b/mempson/archive/2010/01/10/userenvlog-for-windows-vista-2008-win7.aspx

Categorias:Active Directory, GPO Tags:, , ,