MS_PowerShellRemoting - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒPowerShellïŒ
ãªã¢ãŒãã³ã³ãã¥ãŒã¿ãŒã§ PowerShell ã®ã³ãã³ããå®è¡ããæ¹æ³ã«ã€ããŠãŸãšããã
invoke-command ãã·ã³åãSessionãæå® -scriptblock { ã»ã»ã»ã³ãŒãã»ã»ã» }
invoke-command ãã·ã³åãSessionãæå® -filepath ãã¡ã€ã«ãã¹â» Session ãæå®ããã°åŠçäžã®ãžã§ãçã«åæ¥ç¶ããããšãå¯èœã
ç§»è¡ã¡ã¢ïŒäœè£ïŒ: ç§»è¡å ã§ã¯äžèšã®æ³šèšã
#ã§å§ãŸã£ãŠããã
PukiWiki äžã¯æ¬æãšããŠæ±ãããŠããã
Markdown ã§ã¯èŠåºãèšæ³ãšè¡çªãããããâ»ãã«çœ®ãæããã
è£è¶³ïŒPowerShell ãªã¢ãŒãåŠçã®å šäœåïŒ: æ¬ããŒãžã¯
WorkgroupïŒéãã¡ã€ã³ïŒç°å¢ãšããæãé¢åãªã±ãŒã¹ãæ±ã£ãŠããã
åæãæŽçããŠãããšã以éã®æé ã®æå³ãåãããããããPSRemoting ã®åºç€ãâ PowerShell Remoting â WS-ManagementïŒWS-ManïŒâŠ æšæºãããã³ã« â WinRM ãµãŒã㹠⊠Windows ã®å®è£ â HTTP:5985 / HTTPS:5986 â ïŒæ§ 80/443 ãã倿ŽãããïŒ ãèªèšŒæ¹åŒãšé£æåºŠãâ ã»ããã¡ã€ã³åå ãç°å¢ â Kerberos ã§çžäºèªèšŒã§ãã â ãèšå®ã¯ã»ãŒ Enable-PSRemoting ã ããâ ã»ãWorkgroupãç°å¢ïŒæ¬ããŒãžïŒ â Kerberos ã䜿ãã NTLM ã«ãªã â ãµãŒãã®çæ£æ§ã確èªã§ããªã â ã ãããTrustedHosts ã«æã§ç»é²ãããå¿ èŠããã â æ¬ããŒãžã®æé ãé·ãã®ã¯ãã®ãã ãããäžã€ã®éžæè¢ã ã»ãHTTPSïŒ5986ïŒïŒ èšŒææžãã§æ§æãã â TrustedHosts ãäžèŠã«ãªã â â èšŒææžã®é åžã»æŽæ°ã¯å¿ èŠ â Workgroup ã§æä¹ éçšãããªããã¡ããæ¬ç
Invoke-Command ã䜿ã£ãŠããªã¢ãŒãã§ã³ãã³ãå®è¡ãã§ããŸãã
- ãã ããäºåã«æ§æã倿ŽããŠããå¿ èŠããããŸãã
- ãŸããå®è¡ããèŠä»¶ã«ãã£ãŠã¯è¿œå ã®æ§æãå¿ èŠã§ãã
ãªã¢ãŒãå ã§ãªã¢ãŒãã³ãã³ããåŒã°ããæºå (PowerShellã 管çè ãšããŠå®è¡)
- PowerShell ãªã¢ãŒãåŠçãæå¹ã«ãã
Enable-PSRemotingãEnable-PSRemoting ã¯ãPowerShell ã䜿ã£ãŠãªã¢ãŒãããã³ãã³ãå®è¡ã§ããããã«ã
以äžã®æ§ãªæ§æå€æŽããŸãšããŠè¡ããŸãã
- WinRM ãµãŒãã¹ãèµ·åããŸãã
- WinRM ãµãŒãã¹ã®ã¹ã¿ãŒãã¢ããã®çš®é¡ã [èªå] ã«èšå®ããŸãã
- ä»»æã® IP ã¢ãã¬ã¹ã§èŠæ±ãåãå ¥ããããã®ãªã¹ããŒãäœæããŸãã
- WS-Management éä¿¡ã®ãã¡ã€ã¢ãŠã©ãŒã«äŸå€ãæå¹ã«ããŸãã
- "Microsoft.PowerShell" ã»ãã·ã§ã³æ§æããŸã ç»é²ãããŠããªãå Žåã¯ç»é²ããŸãã
- "Microsoft.PowerShell32" ã»ãã·ã§ã³æ§æã 64 ããã ã³ã³ãã¥ãŒã¿ãŒã§
ãŸã ç»é²ãããŠããªãå Žåã¯ç»é²ããŸãã - ç»é²æžã¿ã®ãã¹ãŠã®ã»ãã·ã§ã³æ§æã®ã»ãã¥ãªãã£èšè¿°åãã
"Deny Everyone" èšå®ãåé€ããŸãã - WinRM ãµãŒãã¹ãåèµ·åããŠã倿Žãæå¹ã«ããŸãã
è§£æŸããããå Žåã¯(ä»»æã® IP ã¢ãã¬ã¹ã§..ãªã©)ãç¯å²ã調æŽããå¿ èŠãããããæ€èšãã ããã
ãªã¢ãŒãããå®è¡ã®å¯åŠãå¶åŸ¡ããã«ã¯ããŠãŒã¶ãŒãšæš©é(åŸè¿°)ããŸãã¯ã
ãã¡ã€ã¢ãŠã©ãŒã«äŸå€("Windows ãªã¢ãŒã管ç (HTTP åä¿¡)")ã®ã¹ã³ãŒãèšå®ã§è¡ããŸãã
ç§»è¡ã¡ã¢ïŒäœè£ã»èª€åïŒ: äžèšåŒçšã® 1 è¡ç®ã¯ç§»è¡å ã§
PukiWiki ã®æã¡æ¶ãèšæ³ïŒ%%...%%ïŒã䜿ãããŠããããã
GitHub ã®æã¡æ¶ãèšæ³ïŒ~~...~~ïŒã«å€æããã
ãŸãããã¡ã€ã«ãŠã©ãŒã«äŸå€ããããã¡ã€ã¢ãŠã©ãŒã«äŸå€ãã«ä¿®æ£ããã
- PowerShell ãªã¢ãŒãåŠçå¯èœãªãŠãŒã¶ãŒãšæš©éã®èšå®
Set-PSSessionConfiguration Microsoft.Powershell -ShowSecurityDescriptorUIãå®è¡ãããšæš©éãèšå®ããç»é¢ã衚瀺ãããã®ã§ããªã¢ãŒãããæå®ãããŠãŒã¶ãŒãš
æš©éã远å ã
ã(Administrators ã¡ã³ããŒä»¥å€ã®ãŠãŒã¶ãŒã䜿çšããå Žåã«å¿
èŠ)
è£è¶³ïŒ
Enable-PSRemotingã¯äœãéããã®ãïŒ: äžã®äžèЧã®ãã¡ã
ã»ãã¥ãªãã£äžãã¡ã°ãå¹ãã®ã¯ãã¡ã€ã¢ãŠã©ãŒã«èŠåã®ç¯å²ã§ãããããã¡ã€ã¢ãŠã©ãŒã«èŠåã®ã¹ã³ãŒããâ ã»Enable-PSRemoting 㯠ãWindows ãªã¢ãŒã管ç (HTTP åä¿¡)ããæå¹åãã ã»ãããã¯ãŒã¯ ãããã¡ã€ã«ã ããããªãã¯ãã®å Žåã æ¢å®ã§ã¯ãåäžãµããããã®ã¿ãã«å¶éããã â Enable-PSRemoting -SkipNetworkProfileCheck 㧠匷å¶çã«æå¹åã§ãããã ãç¯å²ãåºããã®ã§æ éã«ãâ ãç¯å²ãçµãã Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" ` -RemoteAddress 10.0.0.0/24 ãã»ãã·ã§ã³æ§æïŒEndpointïŒã§çµãæ¹ã匷åãâ â ã»ãJEAïŒJust Enough AdministrationïŒã â ããã®ãŠãŒã¶ãŒã¯ãã®ã³ãã³ãã ãå®è¡ã§ããã ãšããå¶éä»ããšã³ããã€ã³ããäœãã â 管çè æš©éãæž¡ããã« ç¹å®ã®éçšäœæ¥ã ãå§è²ã§ãã â â Workgroup / ãã¡ã€ã³ã©ã¡ãã§ã䜿ãã New-PSSessionConfigurationFile -Path .\ops.pssc ` -SessionType RestrictedRemoteServer ` -VisibleCmdlets 'Get-Service','Restart-Service' Register-PSSessionConfiguration -Name Ops -Path .\ops.pssc â æ¬ããŒãžã®ãæš©éãèšå®ããç»é¢ããã ãã¯ããã«çްããå¶åŸ¡ã§ããã
- WinRM ãµãŒãã¹ãéå§
Start-Service WinRMãWinRM ãµãŒãã¹ãéå§ããŠããªããã°å®è¡ããŸãã
- UAC ã®ãªã¢ãŒãèšå®
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1 -Type DWordã管çè
ç¹æš©ãç¶æããããã«èšå®å€æŽããŸãã
ããããããªããšãäžã® wsman:localhost\client\trustedhosts ã®èšå®ãåºæ¥ãŸããã
- 察象ã®ã³ã³ãã¥ãŒã¿ã ä¿¡é Œããããã¹ãã®äžèЧã«è¿œå
set-item wsman:localhost\client\trustedhosts -value ãªã¢ãŒãã³ã³ãã¥ãŒã¿åããªã¢ãŒãã³ã³ãã¥ãŒã¿å ãè€æ°ããå Žåã¯ã
"ãªã¢ãŒãã³ã³ãã¥ãŒã¿å,ãªã¢ãŒãã³ã³ãã¥ãŒã¿å" ã®æ§ã« æååã«ã㊠, ã§ç¹ããŸãã
ãæ¢åã®èšå®å€ã«è¿œå ããå Žåã¯ãget-item ã§å€ã確èªãã , ã§é£çµããŠèšå®ããŸãã
ç§»è¡ã¡ã¢ïŒäœè£ã»èª€åïŒ: ç§»è¡å ã§ã¯äžèš 2 ã®ã³ãã³ãã
ãïŒäžã¯ãè¡ãæãè¿ããŠããŸããïŒè¡ã®ã³ãã³ãã§ããïŒããšããæ³šèšä»ãã§
3 è¡ã«åããŠèšèŒãããŠããããã1 è¡ã®ã³ãã³ããšããŠæŽåœ¢ãã
ïŒæ¬ããŒãžå 2 ç®æïŒã
ãŸããäŸåã®èšå®å€ã«è¿œå ããå Žåãããæ¢åã®èšå®å€ã«è¿œå ããå Žåãã«ä¿®æ£ããã
â» LocalAccountTokenFilterPolicy ãš wsman:localhost\client\trustedhosts ã®é¢ä¿ã«ã€ããŠã
wsman:localhost\client\trustedhostsãèšå®ããããã«ã¯ã以äžã®æ¡ä»¶ããããŸãã
- 管çè
å®è¡ã®ã³ãã³ãããã³ãã(PowerShell) ã§è¡ãå Žåã¯ã
LocalAccountTokenFilterPolicy ã 1 ã«ãã - ãã«ãã€ã³ Administrator ã§è¡ãå Žåã¯ã LocalAccountTokenFilterPolicy ã®å€æŽã¯äžèŠ
-
wsman:localhost\client\trustedhostsãèšå®ããåŸã¯ã
LocalAccountTokenFilterPolicy ã 0 ã«æ»ããŠãæ§ããŸããã
(LocalAccountTokenFilterPolicy ã 0 ã«æ»ããŠãããã«ã¯èšå®äžå¯èœã«æ»ããŸããã
ãã®å Žå㯠WinRM ãµãŒãã¹ãåèµ·åããŸãã)
è£è¶³ïŒ
LocalAccountTokenFilterPolicyã®æå³ãšå±éºæ§ïŒ: ãã®ã¬ãžã¹ããªã¯
UAC ã®ãªã¢ãŒãå¶éãè§£é€ãããã®ã§ãå¯äœçšã倧ããããæ¢å®ã®åäœïŒUAC ãªã¢ãŒãå¶éïŒãâ ã»ãªã¢ãŒãããããŒã«ã« ã¢ã«ãŠã³ãã§æ¥ç¶ãããšã Administrators ã®ã¡ã³ããŒã§ãã£ãŠã ããã£ã«ã¿ãããïŒæšæºãŠãŒã¶ãŒçžåœã®ïŒããŒã¯ã³ãã äžãããã â 管çè æäœãã§ããªã ã»äŸå€ã¯ããã«ãã€ã³ AdministratorïŒRID 500ïŒãã®ã¿ â åæã® 2 çªç®ã®æ¡ä»¶ã¯ãããæããŠãã â ã1 ã«ãããšäœãèµ·ãããã ã»ãªã¢ãŒãæ¥ç¶ã§ãå®å šãªç®¡çè ããŒã¯ã³ããæž¡ã ã»ã€ãŸã â 管çå ±æïŒ\\host\C$ïŒã«ã¢ã¯ã»ã¹ã§ãã â ãªã¢ãŒãã§ã¬ãžã¹ããªãæäœã§ãã â ãPass-the-Hash æ»æã®æšªå±éã容æã«ãªããâ â ãæšå¥šã ã»åæãæžããšããã ãèšå®åŸã¯ 0 ã«æ»ããâ ã»æä¹ çã«å¿ èŠãªã ãã¡ã€ã³åå or HTTPS + èšŒææžãæ€èšãã ã»ãããã ãTrustedHosts ã« "*" ãå ¥ããªãã â äžéè æ»æãç¡æ¡ä»¶ã«èš±ãããšã«ãªã â
- Invoke-Command ãå®è¡
Invoke-Command -ComputerName ãªã¢ãŒãã³ã³ãã¥ãŒã¿å -Credential (get-credential) -ScriptBlock { ãªã¢ãŒãã³ãã³ã ãªã¢ãŒãã³ãã³ãåŒæ°... }ã(get-credential) ã«ãã£ãŠããŠãŒã¶ãŒåãå
¥åããç»é¢ãéããŸãã
ã-Credential (get-credential) ãæå®ããªããšãInvoke-Command ãå®è¡ããŠãã
ãŠãŒã¶ãŒã§ããªã¢ãŒãã³ã³ãã¥ãŒã¿ãžæ¥ç¶ããã³ãã³ãå®è¡ãããŸãã
ããŠãŒã¶ãŒåãå
¥åããããªãå Žåã¯ã get-credential ãå
ã«è¡ã£ãŠã倿°ã«å
¥ããŠãããã
-Credential ãæå®ããªãããã«ããŸãã
- PowerShell ã§ãªã¢ãŒãå®è¡ããã³ãã³ãããã
ãã¡ã€ã«å ±æãªã©ã®ãããã¯ãŒã¯ãªãœãŒã¹ãžã¢ã¯ã»ã¹ããéã¯ãå¿åãŠãŒã¶ãŒã䜿ãããŸãã
ãªã¢ãŒãã®ã³ãã³ãå®è¡ã®äžãããããã¯ãŒã¯ãªãœãŒã¹ãžãŠãŒã¶ãŒæå®ã§ã¢ã¯ã»ã¹ããå Žåã¯ã
åŸè¿°ã®ããã«ãããç·šãåç §ãããã
sysinternals ã® psexec ããŒã« ãæ€èšãã ããã
( psexec 㯠ãµãŒãã¹ã»ã¿ã¹ã¯ç³»ã®ãããã ãåç §ãã ããã)
ç§»è¡ã¡ã¢ïŒèª€åïŒ: ç§»è¡å ã®ããããã¯ãŒãªãœãŒã¹ãã
ããããã¯ãŒã¯ãªãœãŒã¹ãã«ä¿®æ£ããã
-
Invoke-Command 㯠ãªã¢ãŒããšã®éä¿¡çšã« http ã https ã䜿çšã§ããŸãã
ãããã®æ§ææ¹æ³ããªãã·ã§ã³ãªã©ã¯ãåã³ãã³ãã get-help ã§ç¢ºèªãã ããã- ãŸãããªã¢ãŒããšã®éä¿¡ã« proxy ã䜿çšããããšãã§ããŸãã
- å¿
èŠã§ããã° netsh ã³ãã³ããªã©ã§ winhttp ã® proxy ãèšå®ããã
éä¿¡ã§ããªãå Žåã« winhttp proxy ãåå ã«ãªã£ãŠããªãã確èªãã ããã
-
Credential ãæå®ããªãå Žåã¯ãPowerShell ãå®è¡ããŠããã¢ã«ãŠã³ãã䜿ãããŸãã
- Get-Credential ã¯ãã¹ã¯ãŒãå
¥åã®ããã«ãããã¢ããç»é¢ã衚瀺ããŸãã
ããã¯ã°ã©ãŠã³ãåŠçãªã©ãç»é¢è¡šç€ºãããããªãå Žåã«ã¯ã
ãã¹ã¯ãŒããäºåã«æå·åããŠãã¡ã€ã«ã«ä¿åããŠããããšãã§ããŸãã - ãã¹ã¯ãŒãããã¡ã€ã«ã«ä¿åããæ¹æ³ã
ãã¡ã€ã«ããåãåºã㊠Credential ãªããžã§ã¯ããäœæããæ¹æ³ã¯ã
äžã®ããŒãžãåèãã ããã- ãã³ã: è³æ Œæ
å ±ãåãä»ãã Windows PowerShell ã¹ã¯ãªãããäœæãã
http://technet.microsoft.com/ja-jp/windows/ps_tips13.aspx
- ãã³ã: è³æ Œæ
å ±ãåãä»ãã Windows PowerShell ã¹ã¯ãªãããäœæãã
- Get-Credential ã¯ãã¹ã¯ãŒãå
¥åã®ããã«ãããã¢ããç»é¢ã衚瀺ããŸãã
è£è¶³ïŒãã¹ã¯ãŒãã®ãã¡ã€ã«ä¿åã¯ãåäžãŠãŒã¶ãŒã»åäžãã·ã³ãéå®ïŒ:
ãã®ææ³ã¯äŸ¿å©ã ããå¶çŽãç¥ããã«äœ¿ããšéçšæã«ç Žç¶»ããããä»çµã¿ãâ ConvertFrom-SecureString 㯠æ¢å®ã§ãDPAPIãïŒData Protection APIïŒã䜿ã â ãçŸåšã®ãŠãŒã¶ãŒ + çŸåšã®ãã·ã³ãã«çŽä»ããŠæå·å # ä¿å (Get-Credential).Password | ConvertFrom-SecureString | Set-Content cred.txt # 埩å $sec = Get-Content cred.txt | ConvertTo-SecureString $cred = New-Object PSCredential('user', $sec) ãç Žç¶»ããå Žé¢ãâ â ã»ãå¥ã®ãŠãŒã¶ãŒãã§å®è¡ãããšåŸ©å·ã§ããªã â ã¿ã¹ã¯ ã¹ã±ãžã¥ãŒã©ã§ å¥ã¢ã«ãŠã³ããæå®ããç¬éã«å€±æãã â ã»ãå¥ã®ãã·ã³ãã«ã³ããŒããŠã埩å·ã§ããªã ã»ãŠãŒã¶ãŒ ãããã¡ã€ã«ãäœãçŽããšå€±ããã ã-Key ã䜿ãã°ç§»æ€ã§ãããã ConvertFrom-SecureString -Key $bytes â éµãæž¡ãã°ä»ãã·ã³ã§ã埩å·ã§ãã â ããã®éµãã©ãã«çœ®ãã®ãããšããåé¡ãæ®ã â æ¬è³ªçãªè§£æ±ºã«ãªããªã â ãçŸåšã®æšå¥šãâ ã»ãSecretManagement / SecretStoreãã¢ãžã¥ãŒã« Install-Module Microsoft.PowerShell.SecretManagement Get-Secret -Name MyCred â Azure Key Vault / KeePass çãšã飿ºã§ãã ã»ãgMSAïŒã°ã«ãŒã管çãµãŒãã¹ ã¢ã«ãŠã³ãïŒã â ãã¹ã¯ãŒããæããã«èªèšŒããïŒãã¡ã€ã³ç°å¢ïŒâ ã»èšŒææžããŒã¹ã®èªèšŒ ã».NET Core 以éã® PowerShell 7 ã§ã¯ ãDPAPI ãé Windows ã§äœ¿ããªããç¹ã«ã泚æ
- Invoke-Command -ComputerName Server1,Server2,... ã®æ§ã«è€æ°ã®ãµãŒããŒãèšè¿°ãããšã
ãããã®ãµãŒããŒã«å¯ŸããŠåæå®è¡ããŸãã
å®è¡çµæã¯ãPowerShell ã®ãªããžã§ã¯ããšããŠãïŒã€ã®é åã«æ··åãããŠè¿ããŸãã
(cmd.exe ãªã© PowerShell ã§ãªãã³ãã³ããå®è¡ããå Žå㯠String(æåå) ã®é åã«ãªãã)
ãªããžã§ã¯ãã«ã¯ PSComputerName ããããã£ãä»å ãããã®ã§ã
ãµãŒããŒå¥ã«ãœãŒããããåºå¥ããããšã㯠PSComputerName ã§å€æã§ããŸãã
åæã§ã¯ãªããé ã«å®è¡ãããå Žåã¯ã-ComputerName ã«ïŒã€ãã€æå®ããŸãã
ç§»è¡ã¡ã¢ïŒèª€åïŒ: ç§»è¡å ã®ã-ComputerName ã«ïŒã€ã€ãæå®ããŸããã
ãïŒã€ãã€æå®ããŸããã«ä¿®æ£ããã
è£è¶³ïŒäžŠåå®è¡ã®äžéãšãªããžã§ã¯ãã®å¶çŽïŒ: è€æ°ãµãŒããŒãžã®åæå®è¡ã¯
匷åã ãã2 ã€ã®æ³šæç¹ãããããâ åæå®è¡æ°ã®äžéãâ ã»æ¢å®ã®ãThrottleLimit 㯠32ã ã»ãããè¶ ããå°æ°ãæå®ãããš é æ¬¡ãã¥ãŒã€ã³ã°ããã â -ThrottleLimit ã§èª¿æŽãã â äžãããããšåŒã³åºãåŽãè©°ãŸã ãâ¡ è¿ããªããžã§ã¯ãã¯ããã·ãªã¢ã©ã€ãºæžã¿ããâ â ã»ãªã¢ãŒãããã®æ»ãå€ã¯ XML ã§ã·ãªã¢ã©ã€ãºãããŠéã°ãã â ååããDeserialized.System.XXXãã«ãªã â ãã¡ãœãããåŒã¹ãªããïŒããããã£ã®ã¿ïŒâ $s = Invoke-Command -ComputerName X ` -ScriptBlock { Get-Service W32Time } $s.Stop() # â ã倱æããã ã察åŠã ã»æäœã¯ããªã¢ãŒãåŽã®ã¹ã¯ãªãã ãããã¯å ã§å®çµãããã ã»æ»ãã®ã¯ãçµæã®å€ãã ãã«ãã âãPowerShell 7 ã§ã®æ¹åã ã»ãForEach-Object -Parallelãã远å ããã â ããŒã«ã«ã®äžŠååŠç ã»SSH ããŒã¹ã®ãªã¢ãŒãã£ã³ã°ã䜿ãã â Invoke-Command -HostName host -UserName user -SSHTransport â WinRM / TrustedHosts ã®èšå®ãäžèŠ â Linux ãšãçžäºã«æ¥ç¶ã§ãã â ãWorkgroup ç°å¢ã§ã®æåãªä»£æ¿ãâ
- Invoke-Command ã«ã€ããŠã¯ãäžã®ããŒãžãåç
§ãã ããã
- Windows PowerShell: ãªã¢ãŒãåŠçã«ã€ããŠ
http://technet.microsoft.com/ja-jp/magazine/gg981683.aspx
- Windows PowerShell: ãªã¢ãŒãåŠçã«ã€ããŠ
ïŒããã«ãããã«ã€ããŠã¯ ããŒã¹ ã¯ã©ã€ã¢ã³ã ã»ãã¥ãªã㣠ã¢ãã« ãåç §ïŒ
äžã® Workgroup ç·šã§ã¯ããªã¢ãŒãã³ãã³ãã®äžãããä»ãµãŒããŒã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ãããšã
å¿åãŠãŒã¶ãŒã䜿çšãããŸããã
äžã®æé ã®æ§ã«ãããã«ãããã䜿çšããããšã§ã
-credential ã§æå®ãããã®ãšåãã¢ã«ãŠã³ãã§ ä»ãµãŒããŒã®ãªãœãŒã¹ã«
ã¢ã¯ã»ã¹ããããšãã§ããŸãã
è£è¶³ïŒããã«ãããåé¡ãšã¯ïŒ: æ¬ç¯ã®åæãæç€ºããŠããã
ãããã«ãããïŒäºéãããïŒåé¡ãâ ããªãã®PC âââ èªèšŒâââ ãµãŒãA âââ¡?âââ ãµãŒãB ïŒæåïŒ ïŒå€±æããïŒ ã»â ã§äœ¿ã£ãè³æ Œæ å ±ã¯ ãµãŒã A ã«ãå§ä»»ãããªãã ã»ãµãŒã A ãã B ãžè¡ãããšãããš ãå¿åïŒNULL ã»ãã·ã§ã³ïŒãã«ãªã â ãã¢ã¯ã»ã¹ãæåŠãããŸããã ããªãæ¢å®ã§çŠæ¢ãããŠããã®ããâ ã»è³æ Œæ å ±ãæž¡ããšã ãµãŒã A ããããªãã«ãªãããŸããã ã»A ã䟵害ãããŠããå Žåã 被害ã B 以éãžç¡å¶éã«åºãã â ã ãããæç€ºçã«æå¹åããä»çµã¿ãã«ãªã£ãŠãã ãè§£æ±ºææ®µã®æ¯èŒãâ ã»ãCredSSPãïŒæ¬ããŒãžã®ææ³ïŒ â è³æ Œæ å ±ããå¹³æçžåœã§ A ã«æž¡ãã â å®è£ ãç°¡åã ããæãå±éºãâ â Microsoft ããä»ã«ææ®µããªãå Žåã®ã¿ããšæ³šæåèµ· ã»ãKerberos ã®å¶çŽä»ãå§ä»»ã â ãã¡ã€ã³ç°å¢ã§ã®ã¿å¯èœ â ãå§ä»»å ãéå®ã§ãããã®ã§å®å š â â å¯èœãªããã¡ããéžã¶ ã»ããªãœãŒã¹ ããŒã¹ã®å¶çŽä»ãå§ä»»ïŒRBCDïŒã â ããã«æ°ããæ¹åŒãå§ä»»ãããåŽãèš±å¯ãã ã»ãããããäºéãããããªãèšèšã«ãããâ â â B ã®åŠçã ãA ããåŒã¶ãã®ã§ã¯ãªã ãæå ããçŽæ¥ B ã«å¯ŸããŠè¡ãã â äºæ®µéã®ã¹ã¯ãªããã«åãã â æãå®å šã§ãæãèŠèœãšãããã¡ãªéžæè¢
- ãªã¢ãŒãå ã§ãªã¢ãŒãã³ãã³ããåŒã°ããæºå (PowerShell ã 管çè ãšããŠå®è¡)
# 1.
Enable-PSRemoting
# 2.
Set-PSSessionConfiguration Microsoft.Powershell -ShowSecurityDescriptorUI- ãªã¢ãŒããåŒã³åºãåŽã®æºå (PowerShell ã 管çè ãšããŠå®è¡)
# 1.
Start-Service WinRM
# 2.
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1 -Type DWord
# 3.
set-item wsman:localhost\client\trustedhosts -value ãªã¢ãŒãã³ã³ãã¥ãŒã¿å- ãªã¢ãŒãå ã§è³æ Œæ å ±ãåãåãæºå (PowerShell ã 管çè ãšããŠå®è¡)
# 1.
Enable-WSManCredSSP -Role Server- ãªã¢ãŒããåŒã³åºãåŽã§ãè³æ Œæ å ±ãéä¿¡ããæºå (PowerShell ã 管çè ãšããŠå®è¡)
# 2.
Enable-WSManCredSSP -Role Client -DelegateComputer ãªã¢ãŒãã³ã³ãã¥ãŒã¿å- ãªã¢ãŒããåŒã³åºãåŽã§ãè³æ Œæ å ±ã NTLM èªèšŒã§è¡ãæ§ã«ã°ã«ãŒãããªã·ãŒãèšå®
# 3. gpedit.msc ã³ãã³ã
ã³ã³ãã¥ãŒã¿ãŒã®æ§æ >> 管ççšãã³ãã¬ãŒã >> ã·ã¹ãã >> è³æ Œæ
å ±ã®å§ä»»
NTLMã®ã¿ã®ãµãŒããŒèªèšŒã§æ°ããè³æ Œæ
å ±ã®å§ä»»ãèš±å¯ãã
(x) æå¹
ãµãŒããŒãäžèЧã«è¿œå : [衚瀺]
wsman/ãªã¢ãŒãã³ã³ãã¥ãŒã¿å
ãªã¢ãŒãã§ã³ãã³ããå®è¡
- Invoke-Command ã« -Authentication CredSSP ãä»ããŠå®è¡
Invoke-Command -ComputerName ãªã¢ãŒãã³ã³ãã¥ãŒã¿å -Credential (get-credential) -ScriptBlock { cmd.exe /c "dir \\ãªãœãŒã¹ãµãŒããŒ\ãã¡ã€ã«å
±æ" } -Authentication CredSSPïŒ-ScriptBlock { ... } ã®äžã¯äŸã§ããïŒ
ç§»è¡ã¡ã¢ïŒèª€åã»äœè£ïŒ: ç§»è¡å ã®ã-Authentication CredSSP ãä»ããŠãå®è¡ãã®
éè€ããå©è©ãæŽçããã
ãŸãæãè¿ã泚èšä»ãã§è€æ°è¡ã«åãããŠããã³ãã³ãã 1 è¡ã«æŽåœ¢ããã
è£è¶³ïŒCredSSP ã®æ¢ç¥ã®è匱æ§ïŒ: ãã®ææ³ã䜿ãåã«ã
å¿ ãç¥ã£ãŠããã¹ãäºæ ãããããCVE-2018-0886ïŒCredSSP ã®æå·åãªã©ã¯ã«è匱æ§ïŒãâ â ã»2018幎3æã«å ¬éãããããªã¢ãŒãã³ãŒãå®è¡ãã®èåŒ±æ§ ã»äžéè ã CredSSP ã»ãã·ã§ã³ã«ä»å ¥ãã å§ä»»ãããè³æ Œæ å ±ãæªçšã§ãã ã»ä¿®æ£åŸãMicrosoft ã¯ ãæ¢å®ã®ããªã·ãŒããç·©åæžã¿ã¯ã©ã€ã¢ã³ãã®ã¿èš±å¯ãã«å€æŽã â ããããé©çšç¶æ³ãé£ãéããšæ¥ç¶ã§ããªããªããâ â ãæšæ¥ãŸã§åããŠãã RDP / CredSSP ã çªç¶ãšã©ãŒã«ãªããã®åå ãšããŠæå ã»åé¿ã®ããã«ã¬ãžã¹ããªã§ AllowEncryptionOracle=2ïŒè匱ïŒã«æ»ãæé ã ãããäžã«å€æ°ãããã ã絶察ã«è¡ã£ãŠã¯ãªããªããâ â â åæ¹ã«ããããåœãŠãã®ãæ£è§£ ãCredSSP ã䜿ãå Žåã®æäœéã®é²åŸ¡ã ã»ãHTTPSïŒ5986ïŒã§äœ¿ããâ â å¹³æã® HTTP ã§ CredSSP ã¯é¿ãã ã»-DelegateComputer ã«ãã¯ã€ã«ãã«ãŒãïŒ*ïŒã䜿ããªãã ã»äœ¿ãçµãã£ãã Disable-WSManCredSSP -Role Client Disable-WSManCredSSP -Role Server ã§ãå¿ ãç¡å¹åãããâ ã»å§ä»»ããã¢ã«ãŠã³ãã®æš©éãæå°ã«ãã â åæã®æ³šæäºé ïŒAdministrators ã§ãªããŠããïŒã¯ ãŸãã«ãã®è¶£æšã§ãããé©åãªå©èšã§ãã â
'-credential ã§æå®ãã ãŠãŒã¶ãŒ ã«ã€ããŠ
-credential ã§æå®ãã ãŠãŒã¶ãŒããã³ãã¹ã¯ãŒã ã¯ã
ãªã¢ãŒãã³ã³ãã¥ãŒã¿å ãš ãªãœãŒã¹ãµãŒã㌠ã®äž¡æ¹ã«å ±éãªãã®ãäœæããŠãããŸãã
äžã®äŸã§\\ãªãœãŒã¹ãµãŒããŒ\ãã¡ã€ã«å ±æã®å ±æãã©ã«ãã¯ã
æå®ãã ãŠãŒã¶ãŒ ã§åç §æš©éãèšå®ããŠãããŸãã
ãªã¢ãŒãã³ã³ãã¥ãŒã¿äžã®ãŠãŒã¶ãŒã¯ãAdministrators ã§ãªããŠãããŸããŸããã
ãªã¢ãŒãã³ãã³ãã®å 容ã«å¿ã㊠暩éãä»å ããŠãã ããã
ç§»è¡ã¡ã¢ïŒãªã³ã¯åãïŒ: æ¬ããŒãžã®
technet.microsoft.comã¯
2018ã2019 幎㫠Microsoft Learn ãžçµ±åãããŠãããå°éããªãã
èšé²ãšããŠæ®ãã
Tags: ç§»è¡, ã·ã§ã«, ã€ã³ãã©ã¹ãã©ã¯ãã£, Windows