การป้องกันมัลแวร์จากการดมรหัสผ่าน sudo


10

ฉันมักจะได้ยินคนที่อ้างsudoว่าเป็นหนึ่งในอุปสรรคสำคัญของมัลแวร์ที่ติดคอมพิวเตอร์ Linux

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

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

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

แก้ไข:ฉันสนใจเป็นพิเศษในการป้องกันบัญชีผู้ดูแลระบบที่ถูกบุกรุก กล่าวคือบัญชีที่มีสิทธิ์ใช้งานรูทเต็มรูปแบบด้วยsudo(เช่นบัญชีผู้ใช้ในระบบเดสก์ท็อปทั่วไป)


สำหรับตัวอย่างของชนิดของสิ่งที่ฉันกำลังมองหาให้ดูคำตอบของฉัน ฉันหวังว่าบางคนสามารถอธิบายถึงความเสี่ยงด้านความปลอดภัยที่เกิดขึ้นที่นั่น (หรือสิ่งอื่น ๆ ที่พวกเขานึกถึง) และให้แนวทางในการลดความเสี่ยงเหล่านั้น
Zaz

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

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

"X ทำงานด้วยสิทธิ์ superuser" - คืออะไร เมื่อวันที่เริ่มต้นติดตั้งX , startxทำงานได้ดีเป็นผู้ใช้ปกติ อันที่จริงฉันกำลังใช้งานXในฐานะผู้ใช้ทั่วไปในตอนนี้
Zaz

ใช่เส้นโค้งการเรียนรู้สูงชัน ดูที่ Grsecurity มันง่ายกว่า แต่ทรงพลัง ~ สิทธิพิเศษของ X: ในกล่องของฉันเซิร์ฟเวอร์ X คือรูท SUID และรันรูท
Countermode

คำตอบ:


9

เมื่อมัลแวร์ชิ้นหนึ่งได้รับสิทธิ์เข้าถึงบัญชีของผู้ใช้แล้วมันสามารถ:

1.สร้าง bash alias (ในเชลล์ปัจจุบันและใน~/.bashrc) ไปยังคำสั่งที่จะทำการ[sudo] password for $USER:พรอมต์และขโมยรหัสผ่านของผู้ใช้

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'

2.ในทำนองเดียวกันมันสามารถวางไฟล์ปฏิบัติการที่มีชื่อsudoไว้~/.binและปรับเปลี่ยนPATHตัวแปรเพื่อให้ได้เอฟเฟกต์เดียวกัน:PATH="$HOME/.bin:$PATH"

3.จับการกดปุ่มผ่านเซิร์ฟเวอร์ X ดูคำsudoแล้วลองข้อความระหว่างการEnterกดปุ่มสองครั้งถัดไปเป็นรหัสผ่าน

4.สิ่งที่คล้ายกันสามารถทำได้ในสภาพแวดล้อมใด ๆ (คอนโซลWayland , X) $LD_PRELOADใช้เช่น

5.หากมัลแวร์ติดไวรัสเชลล์ที่ใช้sudoและsudoแคชข้อมูลรับรองมัลแวร์สามารถตรวจสอบอย่างต่อเนื่องว่าเป็นไปได้หรือsudoไม่ที่จะไม่มีรหัสผ่าน:

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"


การป้องกัน:

ที่ 1 และ 2\/bin/sudoใช้ \ละเว้นชื่อแทนและละเว้น/bin/… $PATHหรือเพิ่มชื่อแทนเช่น: ssudo="\/bin/sudo"และใช้ssudoแทนsudoเสมอ ดูเหมือนว่าไม่น่าเป็นไปได้ที่ไวรัสจะฉลาดพอที่จะแมปชื่อแทนนี้ได้

3.หลีกเลี่ยงการพิมพ์รหัสผ่านของคุณเมื่อใช้ X11 ใช้คอนโซลเสมือนหรือเวสตันแทน

5.ชุดในtimestamp_timeout=0/etc/sudoers


วิธีเดียวที่จะขจัดโอกาสที่sudoรหัสผ่านจะถูกดมกลิ่นได้อย่างสมบูรณ์ดูเหมือนจะหลีกเลี่ยงได้ทั้งหมด ให้ล็อกอินเป็นรูทไปยังคอนโซลเสมือนแทน

อ้างอิงจาก Alexander Peslyak : "การใช้งานที่ปลอดภัยเพียงอย่างเดียวสำหรับ su [และ sudo] คือการเปลี่ยนจากบัญชีที่มีสิทธิพิเศษมากกว่ามาเป็นบัญชีที่มีสิทธิ์น้อยกว่า ... "


ในบันทึกด้านข้าง sudo มีวิธีการรับมือบางอย่าง:

  • sudoอ่านจากttyแทนstdinดังนั้นalias sudo='tee -a /tmp/sudo-password | sudo'จะหยุดพักsudo(แต่จะจับรหัสผ่าน)

sudo ถามจากรหัสผ่านผู้ใช้ดังนั้นมัลแวร์จะจับรหัสผ่านของผู้ใช้ที่ได้รับการเข้าถึงแล้ว
ปล้น

3
@rob: จริง ๆ แล้วมันขึ้นอยู่กับว่าคุณได้sudoตั้งค่าไว้อย่างไร แต่อย่างใดตอนนี้มัลแวร์มีรหัสผ่านที่จำเป็นต้องใช้sudoดังนั้นหากผู้ใช้มีการเข้าถึงรูทมัลแวร์
Zaz

3

ไม่มีการป้องกันที่แท้จริง

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

ถ้าฉันตั้งใจจะเข้าถึงฉันจะสร้าง shim ที่มีประโยชน์สำหรับ bash และ zsh และ fish เป็นต้นฉันจะตรวจสอบคำสั่งที่ถูกดำเนินการ ไม่นานหลังจากที่ sudo กลับมาด้วยสถานะเป็นศูนย์ฉันจะเริ่มต้นออก "sudo chmod + s / bin / sh" หรือความไม่เหมาะสมอื่น ๆ

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

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

ปกป้องจากมันได้หรือไม่ คุณต้องปกป้องไฟล์ RC ของคุณ ตรวจสอบ shims หรือคำสั่งอื่น ๆ ที่ใช้ในบรรทัดรับคำสั่ง ค้นหากระบวนการร่วมที่เชื่อมต่อกับเชลล์และเครื่องมือที่ใช้เพื่อรักษาสภาพแวดล้อมของเชลล์ การป้องกันหลักจะเป็นเครื่องมือการบุกรุกโฮสต์ แต่นั่นเป็นเรื่องจริง ป้องกันการโจมตี? ใช้เชลล์แบบง่ายโดยไม่มีการกำหนดค่าอัตโนมัติที่ซับซ้อนและพร้อมท์การใช้งานเท่านั้นนั่นคือสภาพแวดล้อมที่พัฒนา sudo

ฉันเคยเล่นเกมกับ devs อื่น (1980's) ที่เราพยายามเขียนสิ่งที่จะได้รับ terminal ที่ dev อื่นใช้เพื่อแทรกคำสั่ง - นี่เป็นปัญหาเดียวกัน และเราได้ทำให้ง่ายขึ้นในการฝังเครื่องมือที่จะทำการแทรกคำสั่งโดยไม่มีร่องรอยที่มองเห็นได้ :)


1

ไม่แน่ใจเกี่ยวกับวิธีการใด ๆ สำหรับผู้ใช้ที่ได้รับอนุญาตให้ใช้สิทธิ์ root กำไร แต่ฉันรู้ว่าสิ่งที่คุณสามารถทำได้เพื่อให้บิตอันตรายน้อยถ้าคุณอยากจะบอกว่า ช่วยให้คุณกำหนดค่าสิทธิ์แบบละเอียดเพื่อกำหนดกลุ่มผู้ใช้ด้วยสิทธิ์เฉพาะและคำสั่งเฉพาะที่ผู้ใช้บางคนสามารถเรียกใช้sudosudo

SUDO - GRANULAR CONTROL

  • ส่วนของผู้ใช้

    ที่นี่คุณสามารถตั้งค่ากลุ่มสำหรับผู้ใช้ที่คุณจะระบุคำสั่ง ให้ตั้งค่ากลุ่มปฏิบัติการ

    User_Alias  OPS = bob, jdoe 
    

    สิ่งนี้จะสร้างกลุ่ม OPS และทำให้ผู้ใช้ชื่อ bob และ jdoe อยู่ในกลุ่ม

  • Cmnd_Alias

    ที่นี่เราระบุชุดคำสั่งเฉพาะ คุณต้องระบุพา ธ เต็มและตัวเลือกคำสั่งใด ๆ ที่คุณต้องการใช้ ให้ตั้งค่าคำสั่งกลุ่มการดำเนินการ

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    สิ่งนี้จะเพิ่มคำสั่งที่ระบุสามคำสั่งลงในกลุ่มคำสั่ง OPSCMD

  • ข้อมูลจำเพาะสิทธิ์ผู้ใช้

    นี่คือที่ที่เราจะใช้กลุ่มที่เราตั้งค่าไว้จนถึงตอนนี้

    OPS  ALL=(root)  OPSCMD 
    

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

แค่ทำให้sudoนโยบายของคุณแข็งเท่าที่คุณไม่เชื่อใจผู้ใช้ของคุณ:)


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

1

หากคุณสนใจระบบที่คุณเชื่อว่าอาจถูกบุกรุกให้รัน "Rootkit" และใช้ "Tripwire" เพื่อตรวจสอบความสมบูรณ์ของระบบไฟล์

นอกจากนี้ยังแนะนำให้คุณเพิ่มสิทธิ์ sudo ให้เข้มงวดยิ่งขึ้นเช่นคุณไม่ต้องการให้ผู้ใช้ทุกคนเข้าถึงคำสั่งรูททั้งหมดแทนที่จะให้สิทธิ์เข้าถึงคำสั่งเฉพาะผ่าน SUDO


0

ก่อนอื่นให้ดูที่/etc/sudoersไฟล์

รูปแบบจะเป็น user MACHINE=COMMANDSรูปแบบ

ตัวอย่างเช่นผู้ใช้รูทจะมีroot ALL=(ALL) ALL ซึ่งหมายความว่าผู้ใช้รูทสามารถรันคำสั่ง (ทั้งหมด) ได้ทุกที่

หากรายการของคุณมีเช่นALL=(ALL)นั้นคุณเกือบเท่ากับผู้ใช้รูท หากไม่ใช่กรณีนี้และคุณมีสิทธิ์ จำกัด เพียงบางส่วนเท่านั้นผู้โจมตี / มัลแวร์สามารถทำได้เท่าที่สิทธิ์ sudo ของคุณทำได้

เคล็ดลับที่สามารถช่วยคุณได้:

  1. ตรวจสอบ/etc/sudoersไฟล์ของคุณ
  2. เรียกใช้เครื่องสแกนความปลอดภัยเช่น chkrootkit, นักล่ารูทคิท, เซิร์ฟเวอร์ Config ใช้ประโยชน์จากสแกนเนอร์, snort ฯลฯ
  3. ใช้visudoคำสั่งเพื่อแก้ไขและแก้ไขสิทธิ์ของไฟล์ sudoers ของคุณ
  4. เรียกใช้สแกนเนอร์อีกครั้ง

การอ้างอิง: หน้า Linux ของ sudoers และ sudo man sudoers

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.