Arch Linux เห็นว่าสามารถควบคุมเหตุมัลแวร์ได้แล้ว: กระทบแพ็กเกจกว่า 1,500 รายการ
(phoronix.com/news)- ใน คลัง AUR ที่ผู้ใช้มีส่วนร่วม ของ Arch Linux พบแพ็กเกจที่ติดมัลแวร์มากกว่า 400 รายการในตอนแรก ก่อนที่ตัวเลขสุดท้ายจะเพิ่มเป็นมากกว่า 1,500 รายการ
- ในอัปเดตก่อนหน้าเมื่อไม่กี่ชั่วโมงก่อน ระบุว่าแพ็กเกจที่ติดจากเหตุการณ์สัปดาห์นี้มีประมาณ 900 รายการ
- หลังจากนั้นนักพัฒนา Arch Linux ได้ลบ คอมมิตอันตราย ที่รับทราบแล้วทั้งหมด และนับจำนวนแพ็กเกจที่ได้รับผลกระทบได้ 1,579 รายการ
- รายการ 1,579 รายการนี้ก็ยังถูกระบุว่าเป็น รายชื่อจำนวนมากแต่ไม่ใช่ทั้งหมด ของแพ็กเกจที่ได้รับผลกระทบ จึงเป็นไปได้ว่าขอบเขตทั้งหมดอาจกว้างกว่านี้
- ซอฟต์แวร์จำนวนมากในคลังที่ผู้ใช้เป็นผู้ดูแลได้รับผลกระทบจาก เหตุการณ์ด้านความปลอดภัย ครั้งนี้ และในอัปเดตแยกยังมีการโจมตีด้วยมัลแวร์ที่ซับซ้อนยิ่งขึ้นเกิดขึ้นอีก
ภาพรวมเหตุการณ์
- เหตุการณ์เริ่มขึ้นเมื่อพบแพ็กเกจที่ติดมัลแวร์มากกว่า 400 รายการใน คลัง AUR ที่ผู้ใช้มีส่วนร่วม สำหรับผู้ใช้ Arch Linux
- เมื่อใกล้สิ้นสุดวัน ทาง Arch Linux เห็นว่าคอมมิตที่ได้รับผลกระทบทั้งหมดได้รับการจัดการแล้ว แต่จำนวนแพ็กเกจที่ได้รับผลกระทบเพิ่มขึ้นเป็นมากกว่า 1,500 รายการ
- เหตุการณ์ครั้งนี้เป็น เหตุการณ์ด้านความปลอดภัย ที่ส่งผลต่อซอฟต์แวร์จำนวนมากในคลัง Arch Linux ที่ผู้ใช้เป็นผู้ดูแล
การเปลี่ยนแปลงของขอบเขตผลกระทบ
- ในอัปเดตก่อนหน้าเมื่อไม่กี่ชั่วโมงก่อน ระบุว่าเหตุการณ์ในสัปดาห์นี้ทำให้มีแพ็กเกจประมาณ 900 รายการ ติดมัลแวร์
- หลังจากนั้น ตามข้อความล่าสุดในเธรดเหตุการณ์ด้านความปลอดภัย นักพัฒนา Arch Linux ได้ลบคอมมิตอันตรายที่รับทราบแล้วทั้งหมด
- รายการที่ถูกอ้างถึงระบุจำนวนแพ็กเกจที่ได้รับผลกระทบจากมัลแวร์ไว้ที่ 1,579 รายการ
ความไม่แน่นอนที่ยังเหลืออยู่
- แม้แต่รายการที่แสดงแพ็กเกจ 1,579 รายการก็ยังถูกระบุว่าเป็น “รายชื่อจำนวนมากแต่ไม่ใช่ทั้งหมดของแพ็กเกจที่ได้รับผลกระทบ”
- ดังนั้น ตัวเลขที่เปิดเผยออกมาจึงแสดงให้เห็นขอบเขตผลกระทบขนาดใหญ่ที่ยืนยันแล้ว แต่ตัวรายการเองก็ยังครอบคลุมแพ็กเกจทั้งหมดไม่ครบ
อัปเดตเพิ่มเติม
- มีอัปเดตแยกเพิ่มเติมว่าคลัง Arch Linux AUR ได้เผชิญกับการโจมตีด้วยมัลแวร์ที่ซับซ้อนยิ่งขึ้นอีกระลอกหนึ่ง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สงสัยว่าทีม AUR เคยเผยแพร่ การวิเคราะห์หลังเหตุการณ์ หรือไม่
การรับมือครั้งนี้เร็วได้น่าประทับใจ แต่พูดตรง ๆ คือดูเหมือนว่าทั้งนโยบาย AUR และตัว wrapper จำเป็นต้องเปลี่ยน
ควรตั้งอายุขั้นต่ำของแพ็กเกจได้แบบ pnpm และไม่ควรให้ใครก็รับแพ็กเกจ orphan ไปดูแลต่อได้
การรับไปดูแลต่อควรมีการจำกัดอัตราในระดับรวมเพื่อใช้เป็นสัญญาณการโจมตีได้ และก็ควรมีการสแกนช่องโหว่ตอนเผยแพร่เหมือนที่หลายบริษัททำใน NPM
อย่างไรก็ตาม การเปลี่ยนแปลงส่วนใหญ่แบบนี้ดูจะเป็นงานของตัวช่วยแพ็กเกจและบุคคลที่สามมากกว่าผู้ดูแล AUR
แบบนั้นความเป็นเจ้าของจะไม่หายไป จึงไม่จำเป็นต้องมีการทำให้เป็น orphan ตั้งแต่แรก
[1] https://github.com/gavinhungry/patches/blob/main/pakku/pakku...
[2] https://github.com/zqqw/pakku
ควรมีข้อจำกัด แต่เช่น จำกัดเป็น รับไปดูแลต่อได้เดือนละ 1 แพ็กเกจ สำหรับผู้ใช้ที่สมัครมานานระดับหนึ่งก็น่าจะพอดี
ยังไงก็ตาม คนที่ปล่อยให้อัปเดตแพ็กเกจ AUR ที่ติดตั้งในเครื่องแบบอัตโนมัติและไม่ตรวจทานก็คงแทบไม่มีอยู่แล้ว ดังนั้นพื้นผิวการโจมตีก็เล็กพอสมควร
แก่นของเวิร์ม miasma คือการที่ลายเซ็นและวิธีของตัวช่วยเปลี่ยนเร็วเกินไป
มัลแวร์ implant ที่เข้ารหัสจะถอดรหัส payload ด้วยคีย์ AES-128-GCM ที่ต่างกันไปตามตำแหน่ง GitHub ที่อัปโหลด และชื่อเมธอดในโค้ดก็เปลี่ยนแบบไดนามิก พร้อมทั้งสุ่มใช้ encrypted symbol offset ซ้ำด้วย
มันเป็นมัลแวร์แบบกลายพันธุ์ จึงเป็นคู่ต่อสู้ที่แย่มากสำหรับเครื่องมือที่อาศัยลายเซ็น
ดูเหมือน APT28/29 จะพึ่งพาอยู่พอสมควรกับความช้าที่ Microsoft บล็อกผู้ใช้และ repository บน GitHub ที่ถูกใช้เป็นโครงสร้างพื้นฐาน C2 แบบอัตโนมัติ
น่าคิดว่าสิ่งนี้หมายความว่าอย่างไรต่อกลยุทธ์ความปลอดภัย
พอถึงจุดที่สแกนลายเซ็นหรือสตริงได้ ก็เข้าสู่เกมแมวจับหนูกับ botnet อัตโนมัติเต็มรูปแบบไปแล้ว และไม่มีทางชนะ
ตลอดสัปดาห์ที่ผ่านมา เครื่องมือด้าน supply chain ที่ตามการเปลี่ยนแปลงของ implant นี้ทันมีแค่ socket.dev โดยเครื่องมืออื่น ๆ ไม่รู้จัก Miasma ด้วยซ้ำ และเพิ่งมาค้นพบซ้ำว่าเป็นแคมเปญใหม่
ทั้งกำลังคนและ toolchain ไม่พอจะ reverse engineer payload ได้เร็วพอที่จะตาม adapter สำหรับ ecosystem ใหม่ที่โผล่มาทุก 24 ชั่วโมงทัน
คำว่าอัตโนมัติเต็มรูปแบบในที่นี้หมายถึง ใน package ecosystem อื่น ๆ มีการนำ credential ที่ขโมยมาไปใช้แล้วภายในไม่ถึง 48 ชั่วโมง
มีอีเมลและชื่อบางชุดโผล่มาซ้ำ ๆ ซึ่งดูเหมือนเป็นคนที่อาจยังไม่เข้าใจผลกระทบของเวิร์มที่แพร่กระจายตัวเองนี้
ตัวอย่างเช่น ตัวชี้วัดการถูกเจาะที่มองหาแพ็กเกจที่พึ่งพา bun ก็ช่วยอะไรไม่ได้มาก
มัลแวร์แค่ดาวน์โหลดกลับมาใหม่ผ่านวิธีภายนอกก็พอ
ในแคมเปญ PyPI ครั้งที่สอง หลังจากที่คลื่นแรกของ dropper มัลแวร์จากแคมเปญ RedHat ถูกทำเครื่องหมายให้ผู้ดูแล PyPI เห็น ก็มีการเปลี่ยนไปใช้ไฟล์ WHL แบบบีบอัดและไฟล์ setup.pth ที่รันอัตโนมัติเพื่อดาวน์โหลด dropper แทน
หาก package manager ของ ecosystem เหล่านี้ไม่ได้ถูกเขียนใหม่ตั้งแต่ต้นโดยยึด chroot, sandbox, network·domain log และ allowlist รายการต่อรายการเป็นพื้นฐาน กลยุทธ์แจกจ่ายมัลแวร์ผ่านการโจมตี supply chain ก็จะยังใช้ได้จริงต่อไป
repository ของเครื่องมือบรรเทาความเสี่ยงอยู่ที่ [1] และรายละเอียดเชิงเทคนิคอยู่ในบล็อกโพสต์ [2]
Composer, Rubygems, NPM, PyPI และ Go ต่างก็ได้รับผลกระทบเช่นกัน เป็นปัญหาที่ครอบคลุม package manager ทุกตัว
ควรมีการพูดคุยกันอย่างเปิดเผยกว่านี้ว่าเราแบกความประมาทและความไว้วางใจต่อภายนอกไว้มากแค่ไหนในบรรดา package manager ทั้งหลาย และเรื่องนี้ควรต้องเปลี่ยนจริง ๆ
[1] https://github.com/cookiengineer/antimiasma
[2] https://cookie.engineer/weblog/articles/malware-insights-mia...
ตอนที่เริ่มมี pacman wrapper ที่ติดตั้งได้ตรงจาก AUR มันทำให้รู้สึกไม่สบายใจมาก
เคยติดตั้งของจาก AUR อยู่บ้าง แต่ส่วนใหญ่ยังชอบข้ามขั้นกลางแล้วไปที่เว็บไซต์ของโปรเจกต์โดยตรงมากกว่า
PKGBUILD ที่เตรียมไว้ล่วงหน้าไม่ได้สะดวกถึงขั้นคุ้มกับความเสี่ยงจากการยึดชื่อพิมพ์ผิดหรือการอาศัยช่องพึ่งพา npm·pip ในทางที่ผิด
yayจะแสดง diff ของ PKGBUILD ทุกครั้งที่อัปเดตตอนติดตั้งครั้งแรกก็ตรวจ URL และดูว่าสคริปต์ติดตั้งต่าง ๆ สมเหตุสมผลหรือไม่ แล้วหลังจากนั้นการอัปเดตส่วนใหญ่ก็เปลี่ยนแค่เลขเวอร์ชันกับ checksum
การโจมตีแบบยึดชื่อพิมพ์ผิดน่าจะเห็นได้ค่อนข้างชัด
ตอนติดตั้งครั้งแรกอาจเปราะบางอยู่บ้าง แต่การไปที่เว็บไซต์โปรเจกต์แล้วกดดาวน์โหลดก็ไม่ต่างกัน
หลายด้านของชีวิตก็เป็นแบบเดียวกัน
หลังจากใช้ Void Linux ก็เปลี่ยนมาใช้
aurutilsบน Arch เพื่อแยกส่วนคล้ายกันมันทำให้ build เองและดูแล local AUR repository ได้ง่าย แล้วค่อยติดตั้ง·จัดการด้วย
pacmanซึ่งช่วยให้กระบวนการอัปเกรดทั้งหมดดีขึ้นเหตุผลที่ย้ายมา Linux ไม่ใช่เพื่อเสียเวลาไปกับการเข้าเว็บไซต์แล้วกด “download” เพื่ออัปเดตโปรแกรมแบบผู้ใช้ Windows
แต่ pacman wrapper ที่พูดถึงก็ยังดูเสี่ยงอยู่ดี
บทแนะนำที่ใช้ repository พวกนี้แพร่หลายมากจนแทบทำให้รู้สึกว่าตัวเองเป็นคนประหลาดที่ไม่อยากให้สิทธิ์ root แบบไม่มีกำหนดกับคนแปลกหน้าที่แทบไม่มีการตรวจทานโดยเพื่อนร่วมวงการ
ทั้งหมดนี้เพื่อจะติดตั้งแพ็กเกจเวอร์ชันหนึ่งที่อาจไม่ต้องอัปเดตเลยหรือแทบไม่ต้องอัปเดต
ลองอ่านแบบเร็ว ๆ แล้วดูเหมือนว่ามีการติดตั้ง
atomic-lockfile,js-digest,lockfile-jsจาก npmรายการแพ็กเกจที่ได้รับผลกระทบอยู่ใน [1]
ผมหาวิธีตรวจสอบระบบโดยตรงไม่เจอ เลยลองใช้
pacman -Qmiเพื่อหาข้อมูลเกี่ยวกับแพ็กเกจภายนอกและวันที่ที่เกี่ยวข้องจากนั้นก็นำผลลัพธ์ไปเทียบกับรายการแพ็กเกจที่ได้รับผลกระทบได้
นอกจากนี้ยังสามารถค้นหาไฟล์ในหลายตำแหน่งได้แบบนี้
grep -rl "atomic-lockfile" / --include="package.json" --include="package-lock.json"grep -rl "atomic-lockfile" ~/.npm 2>/dev/nullgrep -i "atomic-lockfile" /var/log/pacman.log 2>/dev/nullไม่แน่ใจว่าหลังรันแล้วแพ็กเกจจะลบตัวเองหรือเปล่า
ข้อมูลอื่น ๆ ไม่ค่อยช่วยเท่าไร เลยอยากแชร์อย่างน้อยก็คำสั่งพื้นฐานไว้
[1] https://md.archlinux.org/s/SxbqukK6IA
ใช้
yayเพื่อดึงรายชื่อแพ็กเกจที่ติดตั้งจาก AUR:yay -Qam > packages_aur.lastดาวน์โหลดรายการจาก https://md.archlinux.org/s/SxbqukK6IA#:
curl https://md.archlinux.org/s/SxbqukK6IA/download > compromised.txtจากนั้นรัน
grep -wFf compromised.txt packages_aur.lastก็จะได้แพ็กเกจที่อยู่ในทั้งสองไฟล์ หรือก็คือแพ็กเกจที่น่าจะเคยถูกฝังโค้ดอันตรายในช่วงใดช่วงหนึ่งatomic-lockfileอย่างเดียวไม่พอยังมี
js-digestกับlockfile-jsด้วย และในช่วงหนึ่งก็เปลี่ยนจาก npm ไปใช้ bunเป็นแพลตฟอร์มระดับตำนานจริง ๆ
emacs-magitได้รับผลกระทบได้อย่างไรเท่าที่ผมรู้มันไม่มี JavaScript เลย
เป็นการเตือนที่ยุติธรรมเหมือนทุกครั้งว่าอย่าติดตั้งแพ็กเกจ ไลบรารี หรือแอปพลิเคชันของบุคคลที่สามแบบสุ่ม ๆ โดยไม่ตรวจสอบ
โชคดีที่ครั้งนี้จำกัดอยู่แค่ AUR และ AUR ก็เป็นคลังแพ็กเกจที่แทบใครก็อัปโหลดได้ ต่างจากคลังทางการ และก็มีการเตือนมาหลายครั้งแล้วว่าต้องตรวจดูก่อนติดตั้ง
เครื่องมือบรรทัดคำสั่งอย่าง
ruaและตัวที่คล้ายกันช่วยให้ตรวจสอบแพ็กเกจก่อนติดตั้งจาก AUR ได้ง่ายขึ้นถ้าใช้คอมพิวเตอร์เครื่องเดียวกันทำธุรกรรมธนาคาร ก็ไม่มีข้ออ้างที่จะไม่ตรวจสอบซอฟต์แวร์ที่ตัวเองพึ่งพา
การคุมจำนวนแพ็กเกจให้ต่ำและใช้เท่าที่จำเป็น ยังช่วยให้ตอนอัปเกรดง่ายขึ้นมากด้วย
หมายถึงต้องอ่านโค้ดทุกบรรทัดก่อนติดตั้งหรือ
แล้วถ้าเป็นแพ็กเกจไบนารีล่ะ
จะให้สร้าง reproducible builds สำหรับทุกอย่างที่ติดตั้ง หรือให้ย้ายไปใช้ดิสโทรแบบ source-based แทนหรือ
การโยนความรับผิดชอบนี้ให้ผู้ใช้ไม่ใช่ทางแก้ที่ยั่งยืน
เรื่องสามัญสำนึกก็มีส่วนอยู่บ้าง แต่จะโทษผู้ใช้แบบนี้ไม่ได้
โลกนี้มีโค้ดมากเกินกว่าที่คนคนหนึ่งจะอ่านได้หมดตลอดชีวิต
มีโอกาสสูงที่ตัวคุณเองก็ยังไม่เคยอ่านแม้แต่ 1% ของซอร์สโค้ดที่กำลังรันอยู่บนคอมพิวเตอร์ตอนนี้
ถ้าอย่างนั้นคุณเลิกใช้คอมพิวเตอร์ไปแล้วหรือยัง
แล้วคุณจะเชื่อถือสิ่งที่เกิดขึ้นข้างในนั้นได้อย่างไร
นักพัฒนา Arch Linux ทำงานได้ยอดเยี่ยมและส่วนตัวก็รู้สึกขอบคุณ แต่ในยุคที่ supply chain attack เพิ่มขึ้นแบบนี้ ผมรู้สึกว่าการมีแค่ คำเตือนถึงผู้ใช้ นั้นถึงขีดจำกัดมานานแล้ว
ยังมองไม่เห็นวิธีแก้ที่ง่าย แต่การมีมาตรการอย่าง peer review ก่อนเผยแพร่ หรือช่วงหน่วงเวลา อาจช่วยบรรเทาปัญหาได้บ้าง
การที่ผู้โจมตีสามารถทำเครื่องหมายแพ็กเกจว่าเป็นแพ็กเกจกำพร้า รอ 2 สัปดาห์ แล้วถ้าผู้ดูแลเดิมกำลังลาพักจนไม่ตอบ ก็จะได้สิทธิเป็นผู้ดูแลและปล่อยอัปเดตเผ็ดร้อนออกมาได้ เป็นอะไรที่ไม่น่าเชื่อ
ดิสโทรแบบ immutable, Wayland และ Flatpak มีชิ้นส่วนบางอย่างของแนวทางนี้อยู่แล้ว แต่ยังมีช่องโหว่สำคัญเหลืออยู่
ปัญหาใหญ่ที่สุดคือ sandboxing ถูกผูกติดกับรูปแบบแพ็กเกจ ซึ่งผมคิดว่าเป็นความผิดพลาด
sandboxing และสิทธิ์การเข้าถึงควรเป็นความสามารถระดับระบบ เพื่อให้แม้แต่ไบนารีสุ่ม ๆ ก็หลุดรอดผ่านช่องว่างได้ยาก
ถึงจะไม่แก้ปัญหาได้ทั้งหมด แต่ก็ช่วยลดขอบเขตความเสียหายได้มาก และทำให้ผู้ใช้ดิสโทรเป็นเป้าหมายที่ไม่น่าดึงดูดเท่าเดิม
สำหรับคนที่กังวล ผมเจอรีโพซิทอรีที่รวบรวมสคริปต์และรายการแพ็กเกจล่าสุดไว้เพื่อช่วยตรวจว่าติดเชื้อหรือไม่: https://github.com/lenucksi/aur-malware-check
ใช้อันไหนก็น่าจะเพียงพอเหมือนกัน
ฉันไม่ได้ใช้ Arch Linux แต่ใช้ NodeJS เยอะ และฝั่งนั้นก็เจอการโจมตีคล้าย ๆ กันบ่อย
ช่วงนี้เลยสงสัยว่ามีที่ไหนบ้างที่ทำ การจัดการแพ็กเกจ ได้อย่างถูกต้องและปลอดภัยจริง ๆ
แม้ครั้งนี้จะไม่ใช่เหตุการณ์ขนาดใหญ่แบบนี้ แต่เดิมทีก็เห็นชัดอยู่แล้วว่ามันไม่ปลอดภัย และมีคำเตือนเรื่องความเสี่ยงติดไว้ทั่วไป
ทุกที่มีผู้ดูแลที่ตรวจสอบแพ็กเกจและรับผิดชอบดูแล
Arch Linux ก็เช่นกัน
ความไม่น่าเชื่อถือโดยเนื้อแท้ของ AUR ถูกระบุไว้อย่างชัดเจนเสมอใน Arch Wiki และในวัฒนธรรมรอบ ๆ มัน และแตกต่างจากตัวจัดการแพ็กเกจของภาษาโปรแกรมอย่าง npm หรือ pip
ถ้าจะใช้ AUR ก็ต้องตรวจสอบทุกอย่าง
ดิสโทรส่วนใหญ่ก็โอเค และดิสโทรใหญ่ ๆ ก็มีประวัติด้านนี้ค่อนข้างดี
อาจเป็นเพราะวัฒนธรรม DRY ที่มากเกินไป หรืออาจมีเหตุผลอื่น
เท่าที่ฉันเคยใช้มา ยังไม่เคยเจอฝันร้ายของ dependency tree ระดับใกล้เคียงกันเลย
ใน AUR มี แพ็กเกจกำพร้า 15,000 รายการ
เช้านี้ฉันเรียงตามความนิยม แล้วรับช่วงดูแล 3 รายการที่แทบไม่อัปเดตมาสร้างบิลด์
ถ้าคุณกำลังใช้แพ็กเกจกำพร้าอยู่ อาจคุ้มที่จะพิจารณารับช่วงดูแลเองก่อนที่คนไม่หวังดีจะเข้ามายึดไป
ฉันอาจจะคิดผิด แต่สถานการณ์ครั้งนี้ดูเหมือนเป็นสัญญาณของการที่ เดสก์ท็อป Linux ถูกนำไปใช้มากขึ้น
ฉันไม่เคยมีความจำเป็นต้องใช้ AUR
ถ้าต้องการแพ็กเกจที่ไม่มีในคลังทางการ ฉันก็จะ build เอง หรือถ้ามี binary release ก็จะดาวน์โหลดมา
วิธีนี้ทำให้ไม่จำเป็นต้องใช้ root ตอน build และยังติดตั้งโปรแกรมแบบ local สำหรับผู้ใช้คนเดียวได้ ซึ่งจริง ๆ แล้วเหมาะกับการใช้งานเดสก์ท็อปส่วนใหญ่ด้วยซ้ำ
อย่างน้อยก็ลด ความเป็นไปได้ของการสอดแทรกโค้ดอันตราย ลงไปได้อีกหนึ่งขั้น จากเส้นทาง นักพัฒนา → ผู้ใช้ ให้กลายเป็น นักพัฒนา → ผู้ดูแลแพ็กเกจ → ผู้ใช้
makepkgจะปฏิเสธอย่างจริงจังถ้ารันด้วย rootมันจะไม่ทำงานด้วยสิทธิ์ root เว้นแต่จะฝืนอ้อมด้วยอะไรอย่าง
env EUID=123 makepkg ...แต่ก็คงดีถ้า pacman รองรับการติดตั้งระดับผู้ใช้
ตอนนี้ถ้าไม่ใช่ root มันจะปฏิเสธการติดตั้ง และก็พอจะอ้อมได้ด้วยการแมปตัวเองเป็น root ผ่าน user namespace
ฉันเข้าใจได้ว่าครั้งนี้เป็น AUR
ไม่ว่าจะเป็น AUR หรือไม่ก็ตาม อยากให้ช่วยแชร์ว่าตอนติดตั้งแพ็กเกจคุณผ่านขั้นตอนอะไรบ้าง และรับประกันได้อย่างไรว่าทั้งแพ็กเกจที่จะติดตั้งและ dependency ของมันไม่ใช่มัลแวร์
เพราะถ้าติดตั้งแพ็กเกจแย่ ๆ ไปแล้ว มันดูเหมือนจะย้อนกลับได้ยากมากจริง ๆ