No final, optei por um método para permitir todo o tráfego fora do executável do Skype, mas não de qualquer outra coisa. Como o Forefront não pode determinar com segurança o executável que está sendo executado, optei por criar uma regra que permita a saída de todo o tráfego de um usuário / grupo de usuários específico e force o Skype a executar esse usuário / grupo. O seguinte script AutoIT fornece as funções necessárias para fazê-lo de forma confiável.
#include <Crypt.au3>
; #RequireAdmin ; only for setting the password
Func SetEncrypted($vPassword,$Field)
_Crypt_Startup()
$path="HKLM\Software\MyORG\Skype"
$Key=_Crypt_DeriveKey($vPassword, $CALG_AES_256 )
$FieldValue=InputBox($Field,"")
$output=_Crypt_EncryptData($FieldValue,$Key,$CALG_USERKEY)
RegWrite($path,$Field,"REG_SZ",$output)
_Crypt_DestroyKey($Key)
_Crypt_Shutdown()
EndFunc
Func GetEncrypted($vPassword,$Field)
_Crypt_Startup()
$path="HKLM\Software\MyORG\Skype"
$Key=_Crypt_DeriveKey($vPassword, $CALG_AES_256 )
$input=RegRead($path,$Field)
$decrypted=_Crypt_DecryptData($input,$Key,$CALG_USERKEY)
$decrypted=BinaryToString($decrypted)
_Crypt_DestroyKey($Key)
_Crypt_Shutdown()
Return $decrypted
EndFunc
$EncryptionPassword="super password which will be buried in the exe itself, set this yourself "
;SetEncrypted($EncryptionPassword,"Domain")
;SetEncrypted($EncryptionPassword,"User")
;SetEncrypted($EncryptionPassword,"Password")
$User=GetEncrypted($EncryptionPassword,"User")
$Pass=GetEncrypted($EncryptionPassword,"Password")
$Domain=GetEncrypted($EncryptionPassword,"Domain")
; Find the executable name.
$Skype = RegRead("HKLM\SOFTWARE\Skype\Phone", "SkypePath")
If( $Skype = "" ) Then
; 64 bit support
$Skype= RegRead("HKLM\SOFTWARE\Wow6432Node\Skype\Phone", "SkypePath")
EndIf
MsgBox(0,"",$Skype)
; Run Skype under alternate credentials.
RunAs($User,$Domain,$Pass, 4, $Skype, @SystemDir )
Ao armazenar o ID e a senha no registro, é muito fácil fazer uma atualização de senha para as contas associadas às credenciais alternativas - um item de registro GPP faz o truque.
EDIT - A regra de saída que utiliza autenticação para todo o tráfego de saída deve estar bem no final da lista de prioridades, diretamente acima da regra padrão. Se isso não for feito, qualquer tráfego não autenticado de dentro para fora (como e-mail para terceiros) será eliminado.