ค้นหาเว็บไซต์

วิธีเรียกใช้โปรแกรมโดยไม่มีสิทธิ์ผู้ดูแลระบบและบายพาส UAC Prompt


เมื่อเริ่มต้นใช้งาน บางโปรแกรมต้องการสิทธิ์การใช้งาน (โล่ที่อยู่ถัดจากไอคอนแอป) แต่ที่จริงแล้ว โปรแกรมเหล่านี้ไม่ต้องการสิทธิ์ของผู้ดูแลระบบสำหรับการทำงานตามปกติ ตัวอย่างเช่น คุณสามารถให้สิทธิ์แก่ผู้ใช้ของคุณในโฟลเดอร์แอปใน ProgramFiles และ/หรือรีจิสตรีคีย์ที่โปรแกรมใช้ด้วยตนเองได้ หากเปิดใช้งานการควบคุมบัญชีผู้ใช้บนคอมพิวเตอร์ ข้อความแจ้ง UAC จะปรากฏขึ้นและ Windows จะขอให้ผู้ใช้ป้อนรหัสผ่านผู้ดูแลระบบหากคุณพยายามเรียกใช้โปรแกรมดังกล่าวในฐานะผู้ใช้มาตรฐาน

หากต้องการข้ามกลไกนี้ ผู้ดูแลระบบจำนวนมากเพียงแค่ปิดใช้งาน UAC หรือให้สิทธิ์ผู้ดูแลระบบโดยเพิ่มบัญชีผู้ใช้ในกลุ่ม "ผู้ดูแลระบบ" ภายในเครื่อง แน่นอนว่าทั้งสองวิธีไม่ปลอดภัย ไม่แนะนำให้ใช้วิธีการเหล่านี้อย่างแพร่หลายเนื่องจากลดความปลอดภัยของ Windows ในบทความนี้ เราจะดูวิธีเรียกใช้โปรแกรมที่ต้องมีสิทธิ์ของผู้ดูแลระบบในฐานะผู้ใช้มาตรฐานและระงับการแจ้งการยกระดับ UAC

กำหนดค่าสิทธิ์สำหรับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเพื่อเรียกใช้โปรแกรม

โปรแกรม Windows อาจขอสิทธิ์ผู้ดูแลระบบเมื่อเริ่มทำงานหาก:

  • โปรแกรมจำเป็นต้องเข้าถึงไดเร็กทอรีระบบหรือไฟล์ที่ไม่ได้ให้สิทธิ์ NTFS แก่ผู้ใช้ที่ไม่มีสิทธิ์

  • หากโปรแกรมถูกคอมไพล์ด้วยแฟล็กพิเศษที่ต้องมีการยกระดับเมื่อเริ่มต้น (

    requireAdministrator

    ).

ในกรณีแรก สิ่งที่จำเป็นในการแก้ปัญหาคือการให้สิทธิ์ผู้ใช้ RW หรือการควบคุมทั้งหมดแก่ไดเร็กทอรีโปรแกรมหรือไดเร็กทอรี/ไฟล์ระบบที่ต้องการ ตัวอย่างเช่น โปรแกรมจัดเก็บไฟล์ (บันทึก ไฟล์กำหนดค่า ฯลฯ) ไว้ในโฟลเดอร์ของตัวเองใน

C:\Program Files (x86)\SomeApp

หรือไดเร็กทอรีระบบบางส่วน ผู้ใช้ต้องมีสิทธิ์ในการเขียนไฟล์เหล่านี้เพื่อให้โปรแกรมทำงานได้อย่างถูกต้อง เพื่อให้โปรแกรมนี้ทำงานได้ตามปกติ ต้องได้รับอนุญาตจากผู้ดูแลระบบ

ในการอนุญาตให้โปรแกรมทำงานในฐานะผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ ก็เพียงพอแล้วที่จะให้สิทธิ์แก่ผู้ใช้ (หรือกลุ่มผู้ใช้ในตัว) ในการแก้ไข/เขียนไฟล์/ไดเร็กทอรีที่ระดับระบบไฟล์ NTFS

หากต้องการค้นหารายการไฟล์ โฟลเดอร์ และรีจิสตรีคีย์ที่โปรแกรมกำลังเข้าถึง ให้ใช้ การตรวจสอบกระบวนการ (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon) . เปิดใช้งานตัวกรองตามชื่อกระบวนการของโปรแกรมและค้นหาทรัพยากรทั้งหมด หากคุณพยายามเข้าถึง การเข้าถึงถูกปฏิเสธจะแสดงขึ้น ให้สิทธิ์ที่จำเป็นแก่โฟลเดอร์/ไฟล์/รีจิสตรีคีย์

หมายเหตุ ที่จริงแล้ว ไม่แนะนำให้เก็บข้อมูลแอปพลิเคชันที่เปลี่ยนแปลงไว้ในไดเร็กทอรี C:\Program Files เป็นการดีกว่าที่จะเก็บข้อมูลแอปไว้ในโปรไฟล์ผู้ใช้ แต่มันเป็นคำถามเกี่ยวกับความเกียจคร้านและความไร้ความสามารถของผู้พัฒนาแอพ

อนุญาตให้ผู้ใช้มาตรฐานเรียกใช้โปรแกรมที่ต้องการสิทธิ์ของผู้ดูแลระบบ

ก่อนหน้านี้เราได้อธิบายวิธีปิดใช้งานพรอมต์ UAC สำหรับโปรแกรมเฉพาะโดยใช้พารามิเตอร์ RunAsInvoker อย่างไรก็ตาม วิธีนี้ไม่ยืดหยุ่นเพียงพอ

มาดูวิธีที่ง่ายกว่าในการบังคับให้โปรแกรมใดๆ ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบ (โดยไม่ต้องป้อนรหัสผ่านของผู้ดูแลระบบ) และเมื่อเปิดใช้งาน UAC (ระดับ 4, 3 หรือ 2 ของแถบเลื่อน UAC)

ลองใช้ Registry Editor เป็นตัวอย่าง — regedit.exe (อยู่ในโฟลเดอร์ C:\Windows\) สังเกตแผงป้องกัน UAC ถัดจากไอคอนแอป ไอคอนนี้หมายความว่าต้องมีการยกระดับ UAC เพื่อเรียกใช้แอปพลิเคชันนี้

เมื่อคุณวิ่ง

regedit.exe

คุณจะเห็นพรอมต์การควบคุมบัญชีผู้ใช้ที่ขอข้อมูลประจำตัวของผู้ดูแลระบบ (

Do you want to allow this app to make changes to your device?

). หากคุณไม่ให้รหัสผ่านและไม่ยืนยันระดับความสูง แอปจะไม่เริ่มทำงาน

ลองข้ามคำขอ UAC สำหรับโปรแกรมนี้ สร้างไฟล์ข้อความ run-as-non-admin.bat ที่มีรหัสต่อไปนี้บนเดสก์ท็อปของคุณ:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

หากต้องการบังคับให้ regedit.exe ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบและระงับการแจ้ง UAC เพียงลากไฟล์ EXE ที่คุณต้องการเรียกใช้ไปยังไฟล์ BAT นี้บนเดสก์ท็อป

Registry Editor ควรเริ่มต้นโดยไม่ต้องแจ้ง UAC และไม่ต้องป้อนรหัสผ่านของผู้ดูแลระบบ หากคุณเปิดตัวจัดการงานและเพิ่มคอลัมน์ ยกระดับ คุณจะเห็นว่ามีกระบวนการ regedit.exe ที่ไม่มีสถานะยกระดับ (เรียกใช้โดยให้สิทธิ์ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ)

พยายามแก้ไขรายการใดๆ ภายใต้กลุ่มรีจิสทรี HKEY_LOCAL_MACHINE อย่างที่คุณเห็น ผู้ใช้ไม่สามารถแก้ไขรายการในคีย์รีจิสทรีนี้ได้ (ผู้ใช้ไม่มีสิทธิ์ในการเขียนสำหรับคีย์รีจิสทรีของระบบ) อย่างไรก็ตาม คุณสามารถเพิ่มหรือแก้ไขรีจิสตรีคีย์และพารามิเตอร์ในกลุ่มผู้ใช้ของคุณ (HKEY_CURRENT_USER)

ในทำนองเดียวกัน คุณสามารถเรียกใช้แอพใดก็ได้โดยใช้ไฟล์ BAT เพียงระบุเส้นทางไปยังปฏิบัติการ

เรียกใช้แอปแบบไม่ใช่ผู้ดูแลระบบ.bat

Set ApplicationPath="C:\Program Files\SomeApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

คุณยังสามารถเพิ่มเมนูบริบทที่อนุญาตให้เรียกใช้แอพทั้งหมดโดยไม่ต้องยกระดับ ในการดำเนินการนี้ ให้สร้างไฟล์ RunAsUser.REG คัดลอกโค้ดต่อไปนี้ลงไป บันทึกและนำเข้าไปยังรีจิสทรีของ Windows โดยดับเบิลคลิกที่ไฟล์ reg (คุณจะต้องมีสิทธิ์ของผู้ดูแลระบบจึงจะนำไปใช้ได้) การเปลี่ยนแปลงนี้)

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run as user without UAC privilege elevation"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

หลังจากนั้น หากต้องการเรียกใช้แอปพลิเคชันใดๆ โดยไม่มีสิทธิ์ของผู้ดูแลระบบ เพียงเลือก “เรียกใช้ในฐานะผู้ใช้โดยไม่มีการยกระดับสิทธิ์ UAC ” จากเมนูบริบทของ Windows File Explorer

คุณสามารถปรับใช้รายการเมนูนี้กับคอมพิวเตอร์ทุกเครื่องในโดเมนโดยการนำเข้าพารามิเตอร์รีจิสทรีโดยใช้ GPO

ฉันต้องการเตือนคุณว่าใช้

RUNASINVOKER

โหมดสำหรับโปรแกรมจะไม่อนุญาตให้คุณยกระดับการอนุญาต RunAsInvoker ระงับพรอมต์ UAC และบอกโปรแกรมว่าควรรันด้วยสิทธิ์ของผู้ใช้ปัจจุบัน และไม่ขอเพิ่มระดับสิทธิ์ หากโปรแกรมต้องการสิทธิ์ขั้นสูงเพื่อแก้ไขการตั้งค่าระบบหรือไฟล์ โปรแกรมจะไม่ทำงานหรือจะขอสิทธิ์ผู้ดูแลระบบอีกครั้ง

จะบายพาส UAC ด้วยตัวเลือก RunAsInvoker ใน CMD ได้อย่างไร

ตัวแปรสภาพแวดล้อม __COMPAT_LAYER ช่วยให้คุณตั้งค่าระดับความเข้ากันได้ที่แตกต่างกันสำหรับแอปพลิเคชัน (แท็บ ความเข้ากันได้ ในคุณสมบัติของไฟล์ EXE) ตัวแปรนี้อนุญาตให้คุณระบุการตั้งค่าความเข้ากันได้ที่คุณต้องการรันโปรแกรม ตัวอย่างเช่น หากต้องการเริ่มแอปในโหมดที่เข้ากันได้กับ Windows 8 ด้วยความละเอียด 640×480 ให้ตั้งค่าดังต่อไปนี้:

set __COMPAT_LAYER=Win8RTM 640x480

ตัวแปร __COMPAT_LAYER มีตัวเลือกบางตัวที่เราสนใจ โดยมีพารามิเตอร์ดังต่อไปนี้:

  • RunAsInvoker - เรียกใช้แอปด้วยสิทธิ์ของกระบวนการหลักโดยไม่ต้องแจ้ง UAC

  • RunAsHighest - รันโปรแกรมด้วยสิทธิ์ระดับสูงสุดสำหรับผู้ใช้ (พรอมต์ UAC จะปรากฏขึ้นหากผู้ใช้มีสิทธิ์ของผู้ดูแลระบบ)

  • RunAsAdmin - เรียกใช้แอปในฐานะผู้ดูแลระบบ (พร้อมท์ UAC จะปรากฏขึ้นเสมอ)

ซึ่งหมายความว่าพารามิเตอร์ RunAsInvoker ไม่ให้สิทธิ์ผู้ดูแลระบบ แต่เพียงระงับพรอมต์ UAC

คำสั่งต่อไปนี้เปิดใช้งานโหมด RunAsInvoker สำหรับกระบวนการปัจจุบัน และรันโปรแกรมที่ระบุโดยไม่มีการยกระดับ:

set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files\MyApp\testapp.exe"

เปิดใช้งานโหมด RunAsInvoker ในไฟล์ EXE ไฟล์ Manifest

ตามที่กล่าวไว้ข้างต้น Windows จะแสดงไอคอนตัวป้องกัน UAC สำหรับโปรแกรมที่ต้องการสิทธิ์ขั้นสูงจึงจะทำงานได้ นักพัฒนาตั้งข้อกำหนดนี้เมื่อรวบรวมแอปพลิเคชันในโปรแกรม รายการ

คุณสามารถแก้ไขไฟล์ Manifest ของไฟล์ EXE และปิดใช้งานข้อกำหนดในการเรียกใช้โปรแกรมในโหมดยกระดับได้

ใช้เครื่องมือ แฮ็กเกอร์ทรัพยากร ฟรีเพื่อแก้ไขไฟล์ Manifest ของโปรแกรม เปิดโปรแกรมปฏิบัติการใน Resource Hacker

ในตัวอย่างนี้ ฉันจะแก้ไขรายการของ

Autologon.exe

เครื่องมือโดย Sysinternals ซึ่งสามารถใช้เพื่อเข้าสู่ระบบ Windows โดยอัตโนมัติโดยไม่ต้องใช้รหัสผ่าน

ในแผนภูมิทางซ้าย ไปที่ส่วน รายการที่ชัดแจ้ง และเปิดรายการรายการของโปรแกรม ให้ความสนใจกับส่วน XML ต่อไปนี้:

<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>

เมื่อเปิดใช้งานตัวเลือก requireAdministrator Windows จะรันโปรแกรมนี้ด้วยสิทธิ์ของผู้ดูแลระบบเสมอ

เปลี่ยน needAdministrator เป็น asInvoker และบันทึกการเปลี่ยนแปลงลงในไฟล์ .exe

โปรดทราบว่าตอนนี้ UAC shield หายไปจากไอคอนของโปรแกรมแล้ว และคุณสามารถเรียกใช้ในฐานะผู้ใช้ปัจจุบันโดยไม่ต้องขอรหัสผ่านของผู้ดูแลระบบ

หากไฟล์แอปปฏิบัติการได้รับการเซ็นชื่อด้วยลายเซ็นดิจิทัล (ใบรับรองการลงนามรหัส) หลังจากแก้ไขไฟล์ exe แล้ว ไฟล์นั้นอาจหยุดทำงานหรือแสดงคำเตือน

ในกรณีนี้ คุณสามารถบังคับให้โปรแกรมใช้ไฟล์รายการภายนอกได้ สร้างไฟล์ข้อความธรรมดา appname.exe.manifest (ตัวอย่างเช่น

Autologon.exe.manifest

) ในไดเร็กทอรีที่มีไฟล์ exe และคัดลอกรหัสรายการจาก Resource Hacker ลงไป แทนที่ needAdministrator ด้วย asInvoker บันทึกไฟล์รายการ

ในการทำให้ Windows พยายามใช้ไฟล์รายการภายนอกเสมอเมื่อเริ่มต้นไฟล์ EXE ให้เปิดใช้งานพารามิเตอร์รีจิสทรีพิเศษ:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f

รีสตาร์ท Windows และตรวจสอบให้แน่ใจว่าโปรแกรมกำลังใช้ไฟล์รายการภายนอกและทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบ

สร้างทางลัดเพื่อเรียกใช้โปรแกรมด้วยรหัสผ่านผู้ดูแลระบบที่บันทึกไว้

หากวิธีเรียกใช้โปรแกรมที่มีแฟล็ก RunAsInvoker ใช้ไม่ได้กับแอปพลิเคชันเดิมของคุณ คุณสามารถลองเรียกใช้แอปดังกล่าวในเซสชันของผู้ใช้โดยใช้ข้อมูลประจำตัวของผู้ดูแลระบบที่บันทึกไว้ นี่เป็นวิธีที่ปลอดภัยน้อยที่สุดในการเรียกใช้โปรแกรมโดยไม่ให้สิทธิ์ผู้ดูแลระบบภายในแก่ผู้ใช้ ดังนั้นเราจึงจงใจปล่อยทิ้งไว้

หากต้องการเปิดโปรแกรม ให้สร้างทางลัดใหม่บนเดสก์ท็อป ระบุชื่อคอมพิวเตอร์ ชื่อผู้ดูแลระบบภายใน และพาธแบบเต็มไปยังแอปเป้าหมายที่เรียกใช้งานได้

ตัวอย่างเช่น:

runas /user:wks-123\root /savecred "C:\CorpApp\myapp.exe"

เมื่อคุณเรียกใช้โปรแกรมเป็นครั้งแรก โปรแกรมจะเปิดพรอมต์คำสั่งซึ่งระบบจะขอให้คุณป้อนรหัสผ่านของผู้ดูแลระบบ

คำสั่ง RunAs เมื่อเรียกใช้ด้วยตัวเลือก /SAVECRED จะบันทึกชื่อผู้ใช้และรหัสผ่านไปยัง Windows Credentials Manager

ครั้งต่อไปที่เรียกใช้ทางลัด เครื่องมือ runas จะรับรหัสผ่านที่บันทึกไว้โดยอัตโนมัติจาก Credentials Manager และใช้เพื่อเรียกใช้แอปภายใต้บัญชีผู้ดูแลระบบภายในที่ระบุ (คุณจะไม่ได้รับพร้อมท์ให้ป้อนรหัสผ่านทุกครั้งที่เปิดทางลัด) .

คำสั่งต่อไปนี้แสดงรายการรหัสผ่านที่บันทึกไว้ใน Credential Manager:

RunDll32.exe keymgr.dll,KRShowKeyMgr

เกิดข้อผิดพลาดเมื่อเรียกใช้ทางลัดบน Windows 11:

RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe
740: The requested operation requires elevation.

เมื่อต้องการแก้ไขปัญหานี้ ให้เปลี่ยนคำสั่งในคุณสมบัติทางลัด แทนที่ด้วย:

C:\Windows\System32\runas /profile /user:WKS-123\root /savecred "cmd.exe /C C:\CorpApp\myapp.exe"

การใช้ตัวเลือก /savecred นั้นไม่ปลอดภัยดังที่เรากล่าวไว้ข้างต้น เนื่องจากผู้ใช้ที่มีรหัสผ่านของผู้ดูแลระบบบันทึกไว้ในโปรไฟล์สามารถใช้รหัสผ่านนี้เพื่อเรียกใช้โปรแกรมหรือคำสั่ง ใดๆ ที่มีสิทธิ์ขั้นสูง หรือแม้กระทั่งเพื่อรีเซ็ตรหัสผ่านของบัญชีผู้ดูแลระบบ รหัสผ่านที่จัดเก็บไว้ใน Credential Manager ยังสามารถถูกทิ้งเป็นข้อความธรรมดาด้วยเครื่องมือต่างๆ เช่น Mimikatz ดังนั้นจึงเป็นการดีกว่าที่จะปิดใช้งานการใช้รหัสผ่านที่บันทึกไว้

บน Windows คุณสามารถปิดใช้งานการบันทึกรหัสผ่านในตัวจัดการข้อมูลประจำตัวโดยใช้ตัวเลือกนโยบายกลุ่ม การเข้าถึงเครือข่าย: ไม่อนุญาตให้จัดเก็บรหัสผ่านและข้อมูลรับรองสำหรับการตรวจสอบสิทธิ์เครือข่าย (การกำหนดค่าคอมพิวเตอร์ -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> นโยบายท้องถิ่น -> ตัวเลือกความปลอดภัย)

มีเครื่องมือของบุคคลที่สามหลายตัวที่ช่วยให้คุณสามารถแก้ไขข้อเสียของการใช้รหัสผ่านของผู้ดูแลระบบที่จัดเก็บไว้ใน runas ตัวอย่างเช่น AdmiLink RunAsRob RunAsSpc แอปเหล่านี้ช่วยให้คุณเก็บรหัสผ่านผู้ดูแลระบบที่เข้ารหัสไว้และเรียกใช้โปรแกรมได้อย่างปลอดภัยด้วยสิทธิ์ของผู้ดูแลระบบ เครื่องมือเหล่านี้จะไม่อนุญาตให้ผู้ใช้เรียกใช้แอปพลิเคชันหรือคำสั่งใด ๆ ด้วยข้อมูลรับรองที่บันทึกไว้ เนื่องจากจะตรวจสอบเส้นทางและผลรวมของไฟล์ปฏิบัติการเมื่อเริ่มทำงาน

บทความที่เกี่ยวข้อง