มีวิธีใดที่จะหยุดผู้ใช้ไม่ให้สร้างไฟล์ที่เรียกทำงานและเรียกใช้งานได้?


31

การโจมตีของ Ransomware อาจใช้การโจมตีแบบ zero-day แต่บ่อยครั้งที่ผู้โจมตีมักจะหลอกผู้ใช้ที่ใจง่ายให้ทำการรันโปรแกรมปฏิบัติการด้วยการดาวน์โหลดและคลิก

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

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


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

3
ไม่ตอบ แต่ให้บอกสิ่งที่คุณสามารถทำได้: เพิ่ม noexec บนการเมาท์ที่เขียนได้โดยผู้ใช้ จะไม่ป้องกันสคริปต์ แต่การดำเนินการจริงไบนารี
Sampo Sarrala

3
@ThomasWard ไม่ว่าเชลล์ จำกัด คืออะไร
Robert Riedl

7
@ThomasWard มีแนวคิดทั่วไปของ 'executables ที่อนุญาตพิเศษ' โดยอนุญาตให้มีรายการที่อนุญาต (สามารถลงนามได้) บางรายการและไม่มีสิ่งใดที่สามารถเรียกใช้ได้โดยไม่มีสิทธิ์ยกระดับ และทั้ง Windows และ OS X มีวิธีแก้ปัญหาที่สมเหตุสมผล ฉันไม่รู้ว่ามีโซลูชัน Ubuntu (หรือ Linux อื่น ๆ ) ที่ดีสำหรับการยกเว้นแอปพลิเคชันที่อนุญาตไหม
Peteris

2
@Peteris มีหลายวิธีเช่น สิ่งที่ฉันชอบคือมีระบบไฟล์แบบอ่านอย่างเดียวที่มีการลงนามพร้อมกับไฟล์ปฏิบัติการของคุณและการติดตั้งอื่น ๆ ทั้งหมดnoexecรวมถึงวิธีการที่ ChromeOS ใช้dm_verityเพื่อให้แน่ใจว่าระบบไฟล์รูทสมบูรณ์ สำหรับผู้ที่ไม่ค่อยมีฮาร์ดคอร์นั้นสามารถใช้โมดูล EVM ได้ ดูwiki.gentoo.org/wiki/Extended_Verification_Moduleสำหรับเอกสารของ Gentoo ในแบบเดียวกัน
ชาร์ลส์ดัฟฟี่

คำตอบ:


50

การโจมตีเฉพาะที่คุณแสดงความกังวลคือ:

บ่อยครั้งที่ผู้โจมตีมักจะหลอกผู้ใช้ที่ใจง่ายให้เรียกใช้ไฟล์ปฏิบัติการโดยการดาวน์โหลดและคลิก

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

  • แอปพลิเคชันรวมถึงเดสก์ท็อปและเชลล์ต้องไม่เรียกใช้โค้ดที่สามารถเรียกใช้งานได้จากไฟล์เมื่อทั้งคู่:

    • ไม่มีบิตที่เรียกใช้งานได้
    • อยู่ในไดเรกทอรีบ้านหรือไดเรกทอรีชั่วคราวของผู้ใช้
  • ไฟล์ที่ดาวน์โหลดจากเว็บเบราว์เซอร์ไคลเอนต์เมล ฯลฯ จะต้องไม่ถูกบันทึกเป็นไฟล์ที่เรียกใช้งานได้

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

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

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

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

  • . ./evilหรือsource ./evilรันคำสั่งในในเปลือกที่กำลังทำงานอยู่evil
  • bash ./evilวิ่งในevilbash
  • python3 evilวิ่งในevilpython3
  • perl evilวิ่งในevilperl
  • ... และโดยทั่วไปinterpreter evilจะทำงานevilในล่าม interpreter
  • ในระบบส่วนใหญ่/lib64/ld-linux-x86-64.so.2 ./evil รันไบนารีที่ปฏิบัติการ evilได้

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

แต่คำแนะนำที่เป็นอันตรายไม่จำเป็นต้องซับซ้อนขนาดนั้น พิจารณาคำสั่งที่ไม่เป็นอันตรายซึ่งเป็นหนึ่งในวิธีที่แนะนำอย่างเป็นทางการในการติดตั้งหรืออัปเดต NVM :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

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

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

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

หากผู้ใช้ของคุณสามารถทำร้ายตัวเองพวกเขาสามารถถูกหลอกทำร้ายตัวเองได้

คุณอาจสามารถ จำกัด โปรแกรมเฉพาะจากการใช้งานหรือพฤติกรรมในลักษณะที่อาจเป็นอันตรายและหากคุณดูที่รูปแบบเฉพาะที่ ransomware มีแนวโน้มที่จะปฏิบัติตามคุณอาจป้องกันกรณีทั่วไปบางอย่างได้ (ดูที่AppArmor ) ซึ่งอาจมีค่าบางอย่าง แต่มันจะไม่ให้อะไรใกล้เคียงกับโซลูชันที่ครอบคลุมที่คุณหวังไว้

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


6
บางทีมาตรการที่ไม่ใช่ด้านเทคนิคจำเป็นต้องรวมถึงการมีข้อมูลติดต่อสำหรับคนที่สามารถตรวจสอบสติที่พวกเขาต้องการทำ เมื่อใดก็ตามที่พวกเขาไม่แน่ใจโทรหรือส่งข้อความและถาม ที่อาจลบสิ่งล่อใจที่จะคาดเดา
Peter Cordes

1
นี่เป็นนามธรรมที่ยอดเยี่ยมเกี่ยวกับปัญหาและความกลัวที่อยู่เบื้องหลังคำถาม OPs
Robert Riedl

ผู้เยาว์เล็กน้อย: " . ./evilหรือsource ./evilเรียกใช้คำสั่งในevil.sh" - sourceคำสั่งเหล่านั้นจะเรียกใช้คำสั่งด้วยevilเว้นแต่ว่าพวกเขาจะระบุส่วนขยายตัวอย่างเช่น. ./evil.sh
หยุดชั่วคราวจนกว่าจะมีประกาศเพิ่มเติม

@DennisWilliamson ขอบคุณ - แก้ไขแล้ว! ที่เหลือจากร่างคร่าวๆเก่าแก่ (ไม่ได้ส่ง) ของคำตอบที่ฉันใช้ชื่อสคริปต์ที่แตกต่างกัน ฉันรู้ได้อย่างรวดเร็วว่ามันงี่เง่า แต่ไม่สามารถเปลี่ยนเหตุการณ์ทั้งหมดได้
Eliah Kagan

1
ทุกครั้งที่ฉันเห็นวิธีการติดตั้งหรืออัปเดตซอฟต์แวร์ที่เกี่ยวข้องกับ "เพียงแค่เรียกใช้สคริปต์นี้และเรียกใช้งาน" เล็บเท้าของฉันจะขดตัวเล็กน้อย ไม่มีอะไรหยุดยั้งไม่ให้ใครบางคนสร้างบัญชี GitHub / repo ที่ปิดด้วยตัวอักษรเดียวหรือใช้ 0 แทน O หรือใช้ UTF-8 ตัวอักษรเพื่อความสับสนและติดสคริปต์ที่เป็นอันตรายของตัวเอง ... สิ่งที่คุณต้องมีคือ พิมพ์ผิดในคำสั่ง wget และ bam ของคุณ
เอียนเคมพ์

11

ใช่*


มันเรียกว่าเชลล์ จำกัด

คุณสามารถใช้/bin/rbashซึ่งมีอยู่แล้วใน Ubuntu และรวมที่มีตัวแปร PATH จำกัด จะห้ามการดำเนินการจากสิ่งที่ไม่ได้อยู่ในrbash$PATH

เพิ่มผู้ใช้ที่ถูก จำกัด :

sudo adduser --shell /bin/rbash res-user

สร้างไดเรกทอรีใหม่ที่เราสามารถเชื่อมโยงไบนารีเข้าด้วยกันซึ่งผู้ใช้จะถูก จำกัด :

sudo mkdir /home/res-user/bin

แก้ไข.profileไฟล์:

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

ทำให้.profile, bashrcและ.bash_profileไม่เปลี่ยนรูป:

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

ตอนนี้เราให้ผู้ใช้สิ่งเดียวที่เขาจะได้รับอนุญาตให้ทำเช่นเปิด Firefox:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

ตอนนี้ถ้าเราเข้าสู่ระบบเพราะres-userเราสามารถเปิด Firefox ได้เท่านั้น:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

เราหนีไม่พ้นเชลล์ที่ จำกัด ของเราได้ง่ายๆ:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

ผู้ใช้ที่ถูก จำกัด ไม่สามารถสร้างไฟล์ที่เรียกใช้งานได้หรือเริ่มต้นพวกเขา:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

ผู้ใช้ที่ถูก จำกัด ไม่สามารถเรียกใช้สคริปต์ที่ชั่วร้ายจากอินเทอร์เน็ตได้เนื่องจากผู้ใช้ไม่สามารถดำเนินการคำสั่งที่จำเป็นได้:

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

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


2
สิ่งนี้พยายามที่จะบรรลุ " สภาพแวดล้อมที่มีข้อ จำกัดอย่างมากซึ่งเกือบทุกสิ่งที่ผู้ใช้คิดว่าจะทำบนคอมพิวเตอร์ไม่ได้รับอนุญาต" (ตามที่ฉันตอบไว้) res-userไม่สามารถเข้าสู่ระบบแบบกราฟิก สิ่งที่มีประโยชน์เดียวที่พวกเขาสามารถทำได้คือในและเรียกใช้ssh -X firefoxคุณสามารถอนุญาตคำสั่งเพิ่มเติมเพื่อให้ผู้ใช้สามารถทำงานได้ จากนั้นการแตกออกง่ายขึ้น วิธีการเชื่อมโยงหลายวิธีสามารถทำให้เป็นแบบตอร์ปิโดเดียว (ซึ่งผู้โจมตีอาจจัดหา) หากผู้ใช้พบว่ามีข้อ จำกัด ในการยับยั้งพวกเขาจะกลายเป็นผู้เชี่ยวชาญในการหลบเลี่ยงพวกเขาในขณะที่ยังคงมีความเข้าใจหรือใจง่ายเหมือนเมื่อก่อน
Eliah Kagan

1
@EliahKagan ใช่ถูกต้อง คุณต้องเชื่อมโยงทุกสิ่งที่ผู้ใช้ต้องการ แต่นี่ใกล้เคียงกับ[... ] มากน้อยแค่ไหนที่มีวิธีการสร้างรายการควบคุมการเข้าถึงและกำหนดว่าผู้ใช้รายนี้สามารถเรียกใช้ไฟล์ในรายการนี้ [... ]เท่านั้น ดังนั้นมันอาจช่วย OP การแตกออกของเปลือกหอยเหล่านี้เป็นไปไม่ได้ แต่เป็นเรื่องยาก เรามีการตั้งค่าที่คล้ายกันสำหรับการเข้าถึงทรัพยากรเฉพาะหรือการข้ามโฮสต์ ฉันสงสัยว่ามีการโจมตีในวงกว้างจากการตั้งค่า จำกัด ของเชลล์ .... และหากคุณกำลังจัดการกับการโจมตีเป้าหมายที่ผู้โจมตีรู้สภาพแวดล้อม .. การเดิมพันทั้งหมดจะปิดอยู่ดี
Robert Riedl

4
ฉันจะยกระดับเชิงอรรถไปที่บรรทัดแรกของคำตอบของคุณ
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

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

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