Fast16: การก่อวินาศกรรมซอฟต์แวร์ความแม่นยำสูงที่มาก่อน Stuxnet 5 ปี
(sentinelone.com)- เป็น เฟรมเวิร์กก่อวินาศกรรมที่ไม่มีเอกสารอธิบายซึ่งสร้างขึ้นในปี 2005 ออกแบบมาเพื่อแพตช์โค้ดในหน่วยความจำของซอฟต์แวร์คำนวณที่เลือกไว้ และ บิดเบือนผลลัพธ์เชิงตัวเลข
svcmgmt.exeภายนอกดูเหมือน service wrapper แต่ภายในบรรจุ Lua 5.0 virtual machine, ไบต์โค้ดที่เข้ารหัส, DLL เสริม และไดรเวอร์fast16.sysเพื่อแยกรันเพย์โหลดตามงานfast16.sysเป็น ไดรเวอร์ไฟล์ซิสเต็มที่เริ่มทำงานตั้งแต่บูต ซึ่งถูกโหลดตั้งแต่ระยะเริ่มต้นมาก ก่อนจะเลือก.EXEที่คอมไพล์ด้วย Intel C/C++ compiler แล้วทำ memory patching ในระดับเคอร์เนล- เอนจินแพตช์ทำงานด้วย กฎ 101 ข้อ โดยเฉพาะการใช้บล็อกคำสั่ง FPU เพื่อเปลี่ยนการสเกลค่าภายในอาร์เรย์ ทิ้งร่องรอยว่าเล็งเป้าไปยังเครื่องมือคำนวณเฉพาะทาง เช่น วิศวกรรมโยธา ฟิสิกส์ และการจำลองกระบวนการ
- เมื่อนำไปรวมกับเครื่องหมาย
fast16จากข้อมูลรั่วของ ShadowBrokers จะเห็นว่า การก่อวินาศกรรมอุตสาหกรรมแบบแม่นยำในยุคก่อน Stuxnet มีอยู่แล้วในรูปแบบที่ผสาน embedded scripting, การเลือกเป้าแบบแคบ, และ kernel patching
ภาพรวมและเบาะแสการระบุตัวตน
fast16เป็นเฟรมเวิร์กไซเบอร์ซาโบตาจที่ไม่มีเอกสารอธิบายและมี คอมโพเนนต์แกนหลักจากปี 2005 โดยfast16.sysจะเลือกเล็งเป้า ซอฟต์แวร์คำนวณความแม่นยำสูง ทำการแพตช์โค้ดในหน่วยความจำและบิดเบือนผลการคำนวณsvcmgmt.exeภายนอกดูเหมือน service wrapper ทั่วไปในยุค Windows 2000/XP แต่ภายในบรรจุ Lua 5.0 virtual machine และ คอนเทนเนอร์ไบต์โค้ดที่เข้ารหัส ซึ่งถูกคลายออกโดย service entry point- ระหว่างการสำรวจมัลแวร์ที่ใช้ Lua นั้น magic byte ของไบต์โค้ด
1B 4C 75 61, version byte,LUA_PATHและ C API เฉพาะตัว กลายเป็นเบาะแสสำคัญ และในกระแสนั้นเองจึงระบุsvcmgmt.exeได้ - สตริง
C:\buildy\driver\fd\i386\fast16.pdbภายในsvcmgmt.exeกลายเป็นเบาะแสทางนิติวิทยาศาสตร์ดิจิทัลที่เชื่อมไฟล์ปฏิบัติการของบริการเข้ากับโปรเจกต์เคอร์เนลไดรเวอร์ - ใน
drv_list.txtจากข้อมูลรั่วของ ShadowBrokers ปี 2017 ก็มีชื่อfast16เดียวกันปรากฏอยู่ ทำให้เชื่อมสตริง PDB ในsvcmgmt.exeกับไดรเวอร์สำหรับงานซาโบตาจแบบแม่นยำเข้าเป็นเส้นเรื่องเดียวกัน - ฝั่ง ShadowBrokers ยังมี signature สำหรับหลบเลี่ยงที่รวมข้อความ
fast16 *** Nothing to see here – carry on***
โครงสร้างตัวพาและวิธีการทำงาน
svcmgmt.exeถูกออกแบบเป็นตัวพาแบบปรับตัวได้ที่เปลี่ยนพฤติกรรมตาม อาร์กิวเมนต์บรรทัดคำสั่ง- ไม่มีอาร์กิวเมนต์: รันเป็นบริการ Windows
-p: ตั้งค่าInstallFlag = 1แล้วรันเป็นบริการ-i: ตั้งค่าInstallFlag = 1แล้วรันโค้ด Lua-r: รันโค้ด Lua โดยไม่ตั้งแฟล็กการติดตั้ง- อื่น ๆ
<filename>: ทำงานในโหมด Wrapper/Proxy โดยสร้าง child process สองตัว ตัวหนึ่งด้วยคำสั่งเดิม และอีกตัวเพิ่มอาร์กิวเมนต์-r
- ภายในสตอเรจมีทั้ง Lua bytecode ที่เข้ารหัส, DLL เสริม และไดรเวอร์
fast16.sys - สภาพแวดล้อม Lua ถูกขยายเกินกว่าค่าพื้นฐาน โดยมีโมดูล
wstring, ฟังก์ชันเข้ารหัสแบบสมมาตรในตัวb, และโมดูล binding สำหรับ Windows NT filesystem, registry, service control และ network API - ไบนารีตัวพาภายนอกถูกคงไว้ให้ค่อนข้างเสถียร ขณะที่เพย์โหลดเฉพาะงานถูกแยกเก็บในรูปแบบเข้ารหัส เพื่อให้นำกลับใช้ซ้ำได้ตามสภาพแวดล้อมและเป้าหมายของปฏิบัติการ
- ค่าระบุตัวตนของ
svcmgmt.exeมีดังนี้- ชื่อไฟล์
svcmgmt.exe - ขนาด
315,392 bytes - MD5
dbe51eabebf9d4ef9581ef99844a2944 - SHA1
de584703c78a60a56028f9834086facd1401b355 - SHA256
9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525 - ประเภท
PE32 executable for MS Windows 4.00 (console), Intel i386 - เวลาเชื่อมลิงก์
2005-08-30 18:15:06 UTC
- ชื่อไฟล์
โครงสร้างการแพร่กระจายแบบ wormlet และการหลบเลี่ยง
svcmgmt.exeทำงานคล้ายตัวพาแบบคลัสเตอร์ที่สามารถบรรทุก wormlet ได้หลายตัว และในตัวอย่างที่ยืนยันแล้วพบเพียง SCM wormlet ตัวเดียว- ลำดับการทำงานประกอบด้วยการเตรียมค่าคอนฟิก การแปลง wide string การยกระดับสิทธิ์ การติดตั้งและเริ่มบริการ
SvcMgmtการวางfast16.sysแบบมีเงื่อนไข การปล่อย wormlet การหน่วงเวลาเริ่มต้น และการวนซ้ำทำงานจนถึงเกณฑ์ความล้มเหลวหรือเงื่อนไขยุติจากภายนอก - SCM wormlet เล็งเป้าไปยังสภาพแวดล้อม Windows 2000/XP โดยค้นหาเซิร์ฟเวอร์ในเครือข่ายผ่าน file share ที่ตั้งรหัสผ่านผู้ดูแลระบบแบบอ่อนแอหรือค่าเริ่มต้น คัดลอกเพย์โหลดเข้าไป แล้วเริ่มบริการจากระยะไกล
- การแพร่กระจายไม่ได้อาศัยโปรโตคอลเครือข่ายแบบปรับแต่งเอง แต่พึ่งพาฟังก์ชันการจัดการมาตรฐานของ Windows เช่น service control API และ file sharing API
- ก่อนติดตั้ง
ok_to_install()จะเรียกok_to_propagate()เพื่อตรวจสอบสภาพแวดล้อม และหากไม่มีการบังคับด้วยมือ จะตัดสินความเป็นไปได้ในการแพร่กระจายจากการมีอยู่ของ registry key ของผลิตภัณฑ์ความปลอดภัยบางรายการ - หากพบ registry key ใด ๆ ต่อไปนี้ จะยกเลิกการติดตั้งเพื่อหลีกเลี่ยงการกระจายไปยังสภาพแวดล้อมสำหรับมอนิเตอร์
HKLM\SOFTWARE\Symantec\InstalledAppsHKLM\SOFTWARE\Sygate Technologies, Inc.\Sygate Personal FirewallHKLM\SOFTWARE\TrendMicro\PFWHKLM\SOFTWARE\Zone Labs\TrueVectorHKLM\SOFTWARE\F-SecureHKLM\SOFTWARE\Network Ice\BlackIceHKLM\SOFTWARE\McAfee.com\Personal FirewallHKLM\SOFTWARE\ComputerAssociates\eTrust EZ ArmorHKLM\SOFTWARE\RedCannon\FireballHKLM\SOFTWARE\Kerio\Personal Firewall 4HKLM\SOFTWARE\KasperskyLab\InstalledProducts\Kaspersky Anti-HackerHKLM\SOFTWARE\Tiny Software\Tiny FirewallHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Look n Stop 2.05p2HKCU\SOFTWARE\Soft4EverHKLM\SOFTWARE\Norman Data Defense SystemsHKLM\SOFTWARE\Agnitum\Outpost FirewallHKLM\SOFTWARE\Panda Software\FirewallHKLM\SOFTWARE\InfoTeCS\TermiNET
connotify.dllทำหน้าที่เป็นช่องทางรายงานผลแบบขั้นต่ำ- ถูกลงทะเบียนผ่าน Windows
AddConnectNotify()API และจะถูกเรียกทุกครั้งที่มีการเชื่อมต่อเครือข่ายใหม่แบบ RAS - ถอดรหัสสตริงที่ทำให้อ่านยากเพื่อให้ได้ named pipe
\\.\pipe\p577จากนั้นเชื่อมต่อกับ local pipe, บันทึกชื่อการเชื่อมต่อแบบ remote/local แล้วจบการทำงาน - ไม่ใช่โมดูลรันเดี่ยวและต้องอาศัยการลงทะเบียนจากโฮสต์โปรเซส
- ชื่อไฟล์
svcmgmt.dll - ขนาด
45056 bytes - MD5
410eddfc19de44249897986ecc8ac449 - SHA1
675cb83cec5f25ebbe8d9f90dea3d836fcb1c234 - SHA256
8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9 - เวลาเชื่อมลิงก์
2005-06-06 18:42:45 UTC - ประเภท
PE32 DLL (i386, 4 sections)
- ถูกลงทะเบียนผ่าน Windows
โครงสร้างไดรเวอร์และวิธีการแพตช์หน่วยความจำ
fast16.sysเป็นคอมโพเนนต์ที่ทรงพลังที่สุดในเฟรมเวิร์ก โดยถูกตั้งค่าเป็น boot-start filesystem driver จึงถูกโหลดในระยะเริ่มต้นมากร่วมกับไดรเวอร์ดิสก์- การตั้งค่าคือ
Start=0,Type=2, กลุ่มคลาสSCSIและแทรกตัวเองไว้เหนือNTFS,FAT,MRxSMB - เมื่อเริ่มทำงานในช่วงแรก จะตั้งค่า
EnablePrefetcherใต้Session Manager\PrefetchParametersเป็น 0 เพื่อให้คำขอ code page หลังจากนั้นต้องผ่านทั้งสแตกของไฟล์ซิสเต็ม - ใช้การเข้ารหัสสตริงแบบ XOR อย่างง่ายและการสแกน
ntoskrnl.exeเพื่อ resolve kernel API แบบไดนามิก และเปิดเผย\Device\fast16,\??\fast16รวมถึงDeviceTypeแบบกำหนดเอง 0xA57C - ใช้
IoRegisterFsRegistrationChangeเพื่อติด worker device object ไว้เหนืออุปกรณ์ไฟล์ซิสเต็มที่มีอยู่และที่เพิ่มเข้ามาใหม่ แล้วดักเส้นทางที่เกี่ยวข้องกับIRP_MJ_CREATE,IRP_MJ_READ,IRP_MJ_CLOSE,IRP_MJ_QUERY_INFORMATION,IRP_MJ_FILE_SYSTEM_CONTROLและ Fast I/O ที่เกี่ยวข้อง - แม้จะถูกโหลดตั้งแต่ช่วงบูต แต่ เอนจินฉีดโค้ดระดับเคอร์เนล ที่แท้จริงจะทำงานหลังจาก
explorer.exeถูกเปิดแล้วเท่านั้น - เป้าหมายที่จะถูกแพตช์ต้องตรงตามสองเงื่อนไขพร้อมกัน
- ชื่อไฟล์ลงท้ายด้วย
.EXE - มีสตริง ASCII ที่พิมพ์ได้ซึ่งขึ้นต้นด้วย
Intelอยู่ถัดจาก PE section header สุดท้ายทันที
- ชื่อไฟล์ลงท้ายด้วย
- เงื่อนไขนี้ชี้ว่าเจาะจงไฟล์ปฏิบัติการที่ build ด้วย Intel C/C++ compiler และแสดงให้เห็นว่าผู้โจมตีรู้จัก toolchain ของซอฟต์แวร์เป้าหมาย
- สำหรับไฟล์ที่ตรงเงื่อนไข จะมีการแก้ไข PE header ในหน่วยความจำ โดยฉีดสองเซกชันใหม่คือ
.xdata,.pdataและเติมไบต์ของเซกชันโค้ดเดิมลงไปเพื่อเก็บสำเนาโค้ดที่สะอาดไว้ - ค่าระบุตัวตนของ
fast16.sysมีดังนี้- ชื่อไฟล์
fast16.sys - ขนาด
44,580 bytes - MD5
0ff6abe0252d4f37a196a1231fae5f26 - SHA1
92e9dcaf7249110047ef121b7586c81d4b8cb4e5 - SHA256
07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529 - ประเภท
PE32 executable for MS Windows 5.00 (native), Intel i386, 5 sections - เวลาลิงก์
2005-07-19 15:15:41 UTC
- ชื่อไฟล์
เอนจินแพตช์แบบอิงกฎและลักษณะของเป้าหมาย
- เอนจินแพตช์เป็นสแกนเนอร์แบบอาศัยสถานะขนาดเล็กที่ประกอบด้วย 101 กฎ โดยจะเปลี่ยนโค้ดที่รันอยู่ในหน่วยความจำอย่างเงียบ ๆ ด้วยตรรกะการจับคู่แพตเทิร์นและการแทนที่ ขณะไฟล์ถูกอ่านจากดิสก์
- เพื่อคงประสิทธิภาพไว้ มันใช้ dispatch array ขนาด 256 ไบต์เพื่อคัดกรองบางไบต์เริ่มต้นอย่างรวดเร็ว อนุญาต wildcard ภายในแพตเทิร์น และบางกฎจะตั้งค่า/ตรวจสอบ state flag เพื่อทำลำดับการแก้ไขหลายขั้น
- แพตเทิร์นแพตช์ส่วนใหญ่สอดคล้องกับลำดับคำสั่งทั่วไปในโค้ด x86 ที่ใช้ยึดหรือมีผลต่อ execution flow แต่มีอยู่หนึ่งรายการที่ประกอบด้วย บล็อกคำสั่ง FPU ขนาดใหญ่กว่ามาก
- บล็อก FPU นี้เป็นโค้ดเฉพาะสำหรับเลขคณิตความแม่นยำสูงและการสเกลค่าของอาร์เรย์ภายใน ซึ่งมีลักษณะแตกต่างจากการฉีดโค้ดอันตรายทั่วไป
- นักวิจัยได้แปลงกฎแพตช์เป็นแพตเทิร์นเลขฐานสิบหกของ YARA signature แล้วนำไปใช้กับคอร์ปัสซอฟต์แวร์ร่วมสมัย และพบว่าไฟล์ที่ตรงสองแพตเทิร์นขึ้นไปมีน้อยมาก ไม่ถึง 10 ไฟล์
- ไฟล์ที่ตรวจพบมีจุดร่วมคือเป็น เครื่องมือคำนวณเฉพาะทาง ในสาขาอย่างวิศวกรรมโยธา ฟิสิกส์ และการจำลองกระบวนการทางกายภาพ
- แพตช์ FPU จะสเกลค่าที่ส่งเข้าไปยังอาร์เรย์ภายในสามชุดเพื่อปรับการคำนวณอย่างละเอียด ซึ่งแสดงให้เห็นว่าเป้าหมายไม่ใช่การเข้าถึงโดยไม่ได้รับอนุญาตหรือการแพร่กระจายทั่วไป แต่เป็น การบิดเบือนผลลัพธ์เชิงตัวเลข
- เนื่องจากยังยืนยันทั้งไบนารีเป้าหมายที่แน่ชัดและเวิร์กโหลดได้ไม่ครบถ้วน ความหมายของอาร์เรย์เหล่านั้นจึงยังไม่อาจระบุได้ทั้งหมด
- การตรวจสอบผลการคำนวณบนระบบแยกต่างหากอาจทำให้การก่อวินาศกรรมแบบนี้ล้มเหลวได้ แต่หากไดรเวอร์ตัวเดียวกันถูกกระจายไปยังหลายระบบที่ใช้เครือข่ายและสภาพแวดล้อมความปลอดภัยเดียวกัน ก็จะลด โอกาสเกิดความไม่สอดคล้องจากการตรวจคำนวณแบบอิสระ ลงด้วย
- ภาคผนวกได้แนบแพตเทิร์นที่ดึงมาบางส่วนของเอนจินแพตช์ไว้ตามเดิม
48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00D8 E1 D9 5D FC D9 04 0055 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 008D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00
ผู้สมัครเป้าหมายของแพตช์
- เป้าหมายที่ผลการจับคู่แพตเทิร์นซ้อนทับกันมากที่สุดคือ LS-DYNA 970, PKPM, และ MOHID
- LS-DYNA 970 เป็นซอฟต์แวร์จำลองทางวิศวกรรมที่ใช้วิเคราะห์พฤติกรรมของวัสดุและโครงสร้างภายใต้สภาวะสุดขั้ว ครอบคลุมการชนของรถยนต์ การระเบิด แรงกระแทก การขึ้นรูปโลหะ และกระบวนการผลิต และถูกใช้ในอุตสาหกรรมยานยนต์ อากาศยานและอวกาศ งานวิจัยด้านกลาโหมและการทหาร การผลิต และวัสดุศาสตร์
- พัฒนามาตั้งแต่ปี 1976
- MD5
1d2f32c57ae2f2013f513d342925e972 - SHA1
2fa28ef1c6744bdc2021abd4048eefc777dccf22 - SHA256
5966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010 - ขนาดไฟล์
5,225,591 bytes - เวลาเชื่อมลิงก์
2003-10-24 16:34:57 UTC - ประเภทไฟล์
PE32 executable for MS Windows 4.00 (console), Intel i386, 7 sections
- PKPM เป็น ชุดผลิตภัณฑ์ CAD วิศวกรรมโครงสร้าง ที่ใช้กันอย่างแพร่หลายในจีน ประกอบด้วยโมดูลปฏิบัติการหลายตัวที่ครอบคลุมวงจรการออกแบบโครงสร้างอาคารทั้งหมด
- SATWE เป็นเอนจินหลักที่รับหน้าที่วิเคราะห์โครงสร้างสามมิติของพื้น คาน เสา ผนัง และเฟรมโดยรวม
- ค่า identifier ของโมดูลออกแบบคอนกรีตรับแรงเฉือน
- MD5
af4461a149bfd2ba566f2abefe7dcde4 - SHA1
586edef41c3b3fba87bf0f0346c7e402f86fc11e - SHA256
09ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22 - ขนาดไฟล์
7716864 bytes - ประเภทไฟล์
PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections - เวลาเชื่อมลิงก์
2011-08-26 10:58:17 UTC
- MD5
- ค่า identifier ของโมดูล Building Structure CAD
- MD5
49a8934ccd34e2aaae6ea1e6a6313ffe - SHA1
3ce5b358c2ddd116ac9582efbb38354809999cb5 - SHA256
8b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0 - ขนาด
11849728 bytes - เวลาเชื่อมลิงก์
2005-12-01 08:35:46 UTC - MD5
e0c10106626711f287ff91c0d6314407 - SHA1
650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05 - SHA256
06361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47 - ขนาด
16355328 bytes - เวลาเชื่อมลิงก์
2012-07-07 08:47:11 UTC
- MD5
- ค่า identifier ของเอนจินวิเคราะห์โครงสร้าง SATWE
- MD5
2717b58246237b35d44ef2e49712d3a2 - SHA1
d475ace24b9aedebf431efc68f9db32d5ae761bd - SHA256
bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613 - ขนาด
9908224 bytes - เวลาเชื่อมลิงก์
2011-01-12 06:37:39 UTC - MD5
daea40562458fc7ae1adb812137d3d05 - SHA1
1ce1111702b765f5c4d09315ff1f0d914f7e5c70 - SHA256
da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1 - ขนาด
8454144 bytes - เวลาเชื่อมลิงก์
2012-11-29 03:10:12 UTC - MD5
2740a703859cbd8b43425d4a2cacb5ec - SHA1
ca665b59bc590292f94c23e04fa458f90d7b20c9 - SHA256
aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33 - ขนาด
16568320 bytes - เวลาเชื่อมลิงก์
2014-12-30 03:23:43 UTC - MD5
ebff5b7d4c5becb8715009df596c5a91 - SHA1
829f8be65dfe159d2b0dc7ee7a61a017acb54b7b - SHA256
37414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062 - ขนาด
8089600 bytes - เวลาเชื่อมลิงก์
2009-04-22 01:46:46 UTC - MD5
cb66a4d52a30bfcd980fe50e7e3f73f0 - SHA1
e6018cd482c012de8b69c64dc3165337bc121b86 - SHA256
66fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2 - ขนาด
9219072 bytes - เวลาเชื่อมลิงก์
N/A
- MD5
- ค่า identifier ของไฟล์ PKPM CAD เพิ่มเติม
- MD5
075b4aa105e728f2b659723e3f36c72c - SHA1
145ef372c3e9c352eaaa53bb0893749163e49892 - SHA256
c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa - ขนาด
6852608 bytes - เวลาเชื่อมลิงก์
2012-06-18 10:01:54 UTC - MD5
cf859f164870d113608a843e4a9600ab - SHA1
952ed694b60c34ba12df9d392269eae3a4f11be4 - SHA256
7e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909 - ขนาด
8392704 bytes - เวลาเชื่อมลิงก์
2012-11-29 03:10:12 UTC
- MD5
- MOHID เป็น ระบบจำลองแบบแหล่งน้ำแบบโอเพนซอร์ส ที่พัฒนาโดย MARETEC ของ Instituto Superior Técnico ในลิสบอน ประเทศโปรตุเกส ครอบคลุมอุทกพลศาสตร์ทางทะเลและชายฝั่ง การจำลองคุณภาพน้ำ การเคลื่อนที่ของตะกอน การจำลองการรั่วไหลของน้ำมัน และการติดตามอนุภาคแบบลากรางจ์
- ระบุว่าจนถึงปัจจุบันก็ยังไม่สามารถระบุผลของการโจมตีที่ตั้งใจไว้ได้อย่างชี้ขาด
- MD5
f4dbbb78979c1ee8a1523c77065e18a5 - SHA1
9e089a733fb2740c0e408b2a25d8f5a451584cf6 - SHA256
e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a - ขนาดไฟล์
5443584 bytes - ประเภทไฟล์
PE32 executable for MS Windows 4.00 (console), Intel i386, 3 sections - เวลาเชื่อมลิงก์
2002-10-18 09:29:54 UTC
- LS-DYNA เคยถูกอ้างถึงร่วมกับงานวิจัยด้าน การจำลองคอมพิวเตอร์ที่เกี่ยวข้องกับการพัฒนาอาวุธนิวเคลียร์ ในรายงานสาธารณะที่เกี่ยวกับข้อสงสัยการละเมิด JCPOA Section T ของอิหร่าน
กฎการตรวจจับและตัวบ่งชี้การบุกรุก
-
ตัวบ่งชี้การบุกรุก
- ไฟล์ที่ยืนยันแล้ว 3 รายการคือ fast16.sys, connotify.dll และ svcmgmt.exe
fast16.sys: MD50ff6abe0252d4f37a196a1231fae5f26, SHA192e9dcaf7249110047ef121b7586c81d4b8cb4e5, SHA25607c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529connotify.dll: MD5410eddfc19de44249897986ecc8ac449, SHA1675cb83cec5f25ebbe8d9f90dea3d836fcb1c234, SHA2568fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9svcmgmt.exe: MD5dbe51eabebf9d4ef9581ef99844a2944, SHA1de584703c78a60a56028f9834086facd1401b355, SHA2569a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
-
apt_fast16_carrier
- ออกแบบมาเพื่อจับ carrier, Lua payload และ plain-text variant โดยมีแฮชอ้างอิงคือ
9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525 - ใช้ Lua bytecode magic
1B 4C 75 61, สตริงbuild_wormlet_table,unpropagate,scm_wormlet_install,install_implant,start_worm,ok_to_propagate - รวมคีย์รีจิสทรีของผลิตภัณฑ์ความปลอดภัยจำนวนมากไว้ในเงื่อนไข เช่น
Symantec,Sygate Personal Firewall,Zone Labs\TrueVector,Kaspersky Anti-Hacker - ตรวจจับร่วมกับแพตเทิร์นไบต์ของสตริงที่เข้ารหัส, ค่าคงที่ของรหัสลับ 2 ค่า, โค้ดถอดรหัสความยาวของ storage container และ signature ของ storage record ที่มีสตริง
file - เงื่อนไขจะเป็นจริงเมื่อไฟล์มี MZ header และขนาดต่ำกว่า 10MB โดยตรงตามอย่างใดอย่างหนึ่งต่อไปนี้: ตรงกับ
$s*3 รายการ,$rk*12 รายการ, รายการใดก็ได้ใน$e*, การวางใกล้กันของค่าคงที่รหัสลับ 2 ค่า และอย่างใดอย่างหนึ่งระหว่าง$code1,$stor1; หรือเมื่อตรงกับ Lua magic และ$s*7 รายการ
- ออกแบบมาเพื่อจับ carrier, Lua payload และ plain-text variant โดยมีแฮชอ้างอิงคือ
-
apt_fast16_driver
- ออกแบบมาเพื่อตรวจจับ driver หรือไฟล์โปรเจ็กต์ที่เกี่ยวข้อง โดยมีแฮชอ้างอิงคือ
07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529 - ใช้สตริงระบุไฟล์ซอร์สจำนวนมาก เช่น
@(#)foo.c :,@(#)par.h :,@(#)pae.h :,@(#)ree.c : - มีแพตเทิร์น
\\Device\\fast16,\\??\\fast16,C:\\buildy\\,driver\\fd\\i386\\fast16.pdb,push 0A57Ch ; DeviceType - ลายเซ็นยังรวมแพตเทิร์น API ที่ push
ExAllocatePool,ExAllocatePoolWithTag,ExFreePool,ExFreePoolWithTagในรูปแบบ XOR ด้วย - เงื่อนไขจะเป็นจริงในไฟล์ที่มีขนาดต่ำกว่า 10MB เมื่อมี MZ header และตรงตามอย่างใดอย่างหนึ่งต่อไปนี้: PDB path 2 รายการ,
C:\\buildy\\และ source identifier 1 รายการ,#devtype == 3,pe.machine == pe.MACHINE_I386,pe.subsystem == pe.SUBSYSTEM_NATIVE, และอย่างใดอย่างหนึ่งระหว่างapi*,dev*2 รายการ; หรือเมื่อตรงกับ source identifier 6 รายการ
- ออกแบบมาเพื่อตรวจจับ driver หรือไฟล์โปรเจ็กต์ที่เกี่ยวข้อง โดยมีแฮชอ้างอิงคือ
-
clean_fast16_patchtarget
- ตรวจจับ ซอฟต์แวร์เป้าหมายของการแพตช์ และระบุว่า
most probably cleanโดยมีแฮชอ้างอิงคือ8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9 - ใช้แพตเทิร์นไบต์จำนวนมากตั้งแต่
$el0ถึง$el99 - เงื่อนไขคือ ไฟล์ขนาดต่ำกว่า 20MB, มี MZ header และ ตรงกับลายเซ็นที่กำหนดอย่างน้อย 2 รายการ
- ตรวจจับ ซอฟต์แวร์เป้าหมายของการแพตช์ และระบุว่า
-
apt_fast16_patch
- ตรวจจับ โค้ดแพตช์ เอง ซึ่งอาจอยู่ในไฟล์ที่ถูกแพตช์แบบสแตติกหรือใน memory dump
- แฮชอ้างอิงคือ
0ff6abe0252d4f37a196a1231fae5f26 - กำหนดแพตเทิร์นไบต์ 3 รายการคือ
$p1,$p2,$p3 - เงื่อนไขคือ
any of themซึ่งหมายถึงตรวจจับได้แม้ตรงเพียงหนึ่งในสามแพตเทิร์น
สายวิวัฒนาการและนัยสำคัญทางประวัติศาสตร์
- สตริง
@(#)par.h $Revision: 1.3 $ภายในไบนารีเป็นเบาะแสที่ช่วยให้คาดเดาสายวิวัฒนาการของเฟรมเวิร์กนี้ได้ - คำนำหน้า
@(#)ชี้ไปยังธรรมเนียมการจัดการซอร์สโค้ดตระกูล SCCS/RCS ของ Unix ในช่วงทศวรรษ 1970–1980 และร่องรอยแบบนี้พบได้ยากใน Windows kernel driver ช่วงกลางทศวรรษ 2000 - อาร์ติแฟกต์เหล่านี้ดูใกล้เคียงกับร่องรอยของวิศวกรระยะยาวที่คุ้นเคยกับวัฒนธรรมและ toolchain ของสภาพแวดล้อม Unix เก่าที่มีความมั่นคงปลอดภัยสูง มากกว่านักพัฒนาที่ทำงานกับ Windows เป็นหลักตามแบบทั่วไป
svcmgmt.exeถูกอัปโหลดไปยัง VirusTotal เกือบ 10 ปีก่อน แต่จนถึงตอนนี้ก็ยังมีอัตราการตรวจจับต่ำมาก และมีเพียงเอนจินเดียวที่จัดเป็นมัลแวร์ทั่วไปด้วยระดับความเชื่อมั่นที่จำกัด- เมื่อพิจารณาร่วมกับซิกเนเจอร์ของ ShadowBrokers ใน Territorial Dispute ทำให้
fast16บีบให้ต้องย้อนมองช่วงเวลาการพัฒนาของ การก่อวินาศกรรมไซเบอร์ระดับรัฐ ที่แฝงตัวอย่างร้ายแรงอีกครั้ง fast16แสดงโครงสร้างที่สอดคล้องกันซึ่งผสาน embedded scripting engine, การเล็งเป้าหมายแบบแคบที่อิงคอมไพเลอร์ และ การแพตช์ระดับเคอร์เนล ตั้งแต่ก่อนตระกูลที่เป็นที่รู้จักกว้างขวางกว่า- ตลอดช่วงเวลายาวนาน แทบไม่มีความเชื่อมโยงกับการวิเคราะห์สาธารณะ แคมเปญที่ถูกตั้งชื่อ หรือเหตุการณ์ตัวแทนใด ๆ และแม้แต่ร่องรอยที่มนุษย์ภายในทิ้งไว้อ่านได้ก็ยังถูกจำกัดไว้เพียงรูปแบบอย่าง
*** Nothing to see here – carry on*** - จึงถูกจัดวางให้เป็นจุดเชื่อมในกระแสวิวัฒนาการของ APT ที่ต่อมานำไปสู่ toolkit ที่อิง Lua และ LuaJIT
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
ตรงนี้น่าสนใจเป็นพิเศษ
มีการเปรียบเทียบว่าการเห็น สัญลักษณ์แบบ SCCS/RCS ใน โค้ดเคอร์เนลของ Windows เมื่อปี 2005 ก็เหมือนกับการเห็นโทรศัพท์หมุนในออฟฟิศสมัยนี้ ซึ่งฟังดูมีน้ำหนักพอสมควร
ห้องแล็บดาราศาสตร์ฟิสิกส์ที่ผมเคยทำงานอยู่ในปี 2006 ก็ยังใช้ svn อยู่ และใน codebase ก็มี Fortran ที่หลงเหลือร่องรอยของระบบจากยุค 70~80 อยู่มาก
ถึงอย่างนั้นมันก็ยังทำงานได้ดีเพราะคอมไพเลอร์สำหรับ optimization รุ่นใหม่ และกระบวนการย้ายจาก Vax ไป Linux ในยุค 90 ก็ลื่นไหลอย่างน่าประหลาดใจ
ทำให้นึกถึงงานพูด do over or make due ที่เคยฟังมาก่อน ซึ่งโดยรวมแล้วใจความคือ การเขียน codebase ขนาดใหญ่ที่ยังใช้งานได้ทั้งก้อนขึ้นมาใหม่ มักไม่คุ้มค่าถ้ายังพอประคับประคองใช้ต่อด้วยเครื่องมือสมัยใหม่ได้
ชื่อมันคือ MKS และใช้วิธีจัดการ revision tree เฉพาะเป็น "project file" ซึ่งดูเหมือนของเก่ายุค 90 มากจนไม่ใช่แม้แต่เวอร์ชันที่ถูกทำใหม่ด้วย Java EE
ส่วนหัวไฟล์จะมีแท็กอย่าง
$Revision: 1.3 $กับ changelog อยู่ แต่ไฟล์ใหม่จำนวนมากกลับไม่ได้ใส่แท็กตั้งแต่แรก เลยไม่มีอะไรให้แทนค่า และความสม่ำเสมอก็พังยับตระกูลอุปกรณ์เป้าหมายเริ่มมาตั้งแต่กลางยุค 90 แต่ตัวโค้ด ณ เวลานั้นจริง ๆ แล้วแทบไม่มีส่วนไหนเก่ากว่า 5 ปี
แม้จะมีวิศวกรแค่ไม่กี่สิบคน แต่ commit conflict ก็เกิดบ่อย และทั้ง tree ก็พังอยู่เรื่อย ๆ
ผมเลยเขียนสคริปต์เล่น ๆ เพื่ออ่าน history ทั้งหมดแล้ว import เข้า git แต่พอย้อนกลับไปไม่กี่ปี บันทึกก็เละเทะจนหมดสภาพ
ไม่รู้เหมือนกันว่าทำไมถึงยังใช้มันอยู่ถึงตอนนั้น แต่บริษัทฮาร์ดแวร์หลายแห่งแม้จะไม่นานมานี้ก็ยังมองการจัดการซอร์สโค้ดเหมือนเป็นแค่ "โฟลเดอร์แชร์ระยะไกล" อยู่ และคงเพราะงั้น การจัดการเวอร์ชัน ฝั่งซอฟต์แวร์เลยไม่ใช่เรื่องสำคัญลำดับต้น ๆ
สายสืบทอดนั้นยังคงเป็นฐานสำคัญของโลกการคำนวณเชิงตัวเลขมาจนถึงทุกวันนี้
จนถึงยุค 2000 ก็ยังมีที่ที่ใช้ RCS กันอยู่จริง และในตัวเครื่องมือเองมันก็มีบางอย่างที่ดีกว่า SVN หรือ CVS ด้วย
เช่นก็พอจินตนาการได้ว่า fast16 อาจเขียนโดยคนที่เดิมทำซอฟต์แวร์คำนวณทางวิทยาศาสตร์ ส่วน Stunex อาจเป็นคนที่เคยทำงานที่ Siemens เขียน
ถ้าต้นเหตุที่ทำให้โค้ดต้องรีแฟกเตอร์ตั้งแต่แรกยังอยู่เหมือนเดิม สุดท้ายมันก็มักจะกลับไปสภาพเดิมอีก
ต้นเหตุนั้นหลายครั้งก็ฝังลึกลงไปถึงระดับจิตวิทยา เช่นนิสัย ความเชื่อ หรือบาดแผลทางอาชีพของนักพัฒนา
พอมี กฎของ Conway เข้ามาซ้อน ท้ายที่สุดทีมก็เลี่ยงไม่ได้ที่จะสร้างซอฟต์แวร์ให้มีหน้าตาเหมือนโครงสร้างองค์กรที่ใหญ่กว่า และถ้าองค์กรไม่เปลี่ยน ผลของการรีแฟกเตอร์ก็มักจะวนซ้ำ
ข้อยกเว้นมักเกิดตอนที่เราได้รับ codebase ของทีมอื่นหรือของคนก่อนหน้ามาดูแล แล้วค่อยจัดโครงสร้างใหม่
แต่ถ้าเป็นคนกลุ่มเดิมประกาศจะรีแฟกเตอร์โค้ดของตัวเอง ส่วนใหญ่ก็มักจบลงที่การสร้างกับดักหนูแบบใหม่ที่สะดวกกับตัวเองกว่าเดิมเท่านั้น
การปรับปรุงสิ่งที่เกิดจากวิธีคิดของตัวเองซ้ำ ๆ ก็ไม่ได้แย่ แต่ถ้าอยากลงจากม้าหมุนจริง ๆ ก็ควรเขียน สาเหตุของสถาปัตยกรรมที่แย่ ออกมา แล้วตรวจสอบตัวเองอย่างตรงไปตรงมา
อย่างที่นักพัฒนาหลายคนอยากเชื่อว่า "ถ้าระวังและขยันพอ แม้การออกแบบจะค่อนข้างแย่ก็ยังทำ implementation ให้ดีได้" นั้น โดยมากแล้วไม่จริง
สุดท้ายรากของปัญหาคือ การออกแบบ และเราต้องเลือกว่าจะยอมรับหรือตัดต้นไม้ที่งอกออกมาจากมัน เพราะแค่ตัดแต่งกิ่งอย่างเดียวมีข้อจำกัดมาก
บทความนี้ให้ความรู้สึก ชวนขนลุก มาก
แค่ความจริงที่ว่ามัลแวร์ตัวนี้อยู่ใต้เรดาร์การตรวจจับมาเป็นเวลา 20 ปี ก็ฟังดูน่ากลัวพอแล้ว
นี่คือลิงก์ดาวน์โหลดสำหรับคนที่อยากลองดู
https://bazaar.abuse.ch/sample/9a10e1faa86a5d39417cae44da5ad...
คงต้องสร้าง Windows XP VM ก่อนเป็นอย่างแรก
อันนี้ดูเหมือนจะเป็นแค่ loader
IEEE-754 บังคับให้มีการปัดเศษที่ถูกต้องเฉพาะกับ +-*/ และ sqrt เท่านั้น
ส่วน ฟังก์ชันอดิศัย อย่าง sin/cos/exp/log/pow นั้นยอมให้ต่างกันได้ไม่กี่ ULP สุดท้าย และ glibc, musl, MSVC, Intel SVML ก็ทำงานแบบนั้นจริง
PID ใช้แค่การคำนวณพื้นฐานจึงได้รับผลจากความต่างของ libm น้อยกว่า แต่การควบคุมเวกเตอร์ของมอเตอร์หรือการทำ sensor linearization นั้นแตะฟังก์ชันพวกนี้ทุก cycle ทำให้ความไม่ตรงกันเล็กน้อยสะสมได้
ดังนั้นถึงไม่มี source code diff เลย การเปลี่ยนแค่ libm ที่ลิงก์อยู่ก็อาจทำให้พฤติกรรมในหน้างานค่อย ๆ drift ได้
ความต่างแบบนี้เกิดขึ้นจริงได้ตรงจุดอย่าง Payne-Hanek argument reduction หรือบริเวณขอบเขตของ table-maker's dilemma ที่แย่ที่สุด
นั่นคงเป็นเหตุผลว่าทำไมแนวทางสำหรับระบบที่มีความสำคัญต่อความปลอดภัยจึงไม่ได้เขียนแค่ว่า "เป็นไปตาม IEEE-754" แต่จะตรึง บิลด์ของ libm ที่ใช้ให้เฉพาะเจาะจงไปเลย
เป็นการค้นพบที่น่าทึ่งจริง ๆ
ผมอยากรู้มากว่ากฎเหล่านี้เล็งเป้าไปที่อะไรแน่ และมันเปลี่ยนผลลัพธ์อย่างไร
หรือมันอาจถูกออกแบบให้สร้างความต่างเฉพาะในเงื่อนไขการจำลองที่จำเพาะมาก ๆ เช่นระดับเครื่องปฏิกรณ์นิวเคลียร์ก็ได้
ตัวอย่างเช่น สมการ EOS_JWL ในคู่มือสาธารณะ [1] เป็นสมการที่ LS-DYNA ใช้นำไปใช้ และเมื่อใช้ร่วมกับสมการอื่น ๆ ก็ดูเหมือนว่าจะนำไปคำนวณสิ่งอย่างเวลาที่ชนวนระเบิดของหัวรบมิสไซล์ใช้ในการจุดระเบิดวัตถุระเบิดหลักเพื่อสร้างคลื่นความดันที่ระดับหนึ่งในระยะ 20 เมตรได้
และถ้าย้อนใช้ผลลัพธ์นั้นกลับ ก็อาจประเมินเวลาของชนวนที่ต้องการได้เช่นกัน
สมการและพารามิเตอร์ที่ใส่ใน LS-DYNA มาจากงานวิจัยวิทยาศาสตร์อย่าง [2] ซึ่งเป็นการวิจัยการทดลองวัตถุระเบิดแรงสูงของรัฐบาลสหรัฐในยุค 1980
ในงานนั้นยังมีการทดลองวัดลักษณะการเสียดสีของวัตถุระเบิดกับวัสดุหุ้มหลายชนิดด้วย
เมื่อมีสมการสำหรับการจำลองวัตถุระเบิดเตรียมไว้พร้อมแล้ว ถ้าไปขยับสมการพวกนั้นเพียงเล็กน้อยแล้วเติม noise ±20% ลงใน ค่าสัมประสิทธิ์ความเสียดทาน นักวิทยาศาสตร์หรือวิศวกรก็น่าจะสงสัยเรื่องคุณภาพการผลิตเหล็กกล้าก่อน มากกว่าจะคิดว่าซอฟต์แวร์ถูกบิดเบือน
ถ้าจะเปรียบแบบร่วมสมัย ก็อาจนึกถึงสถานการณ์ที่ประเทศคู่สงครามแห่งหนึ่งใช้สำเนาเถื่อนของ Ansys Autodyn 2026 R1 ที่กลุ่มแคร็กจีนโพสต์ไว้บนเว็บบอร์ดจีน แล้วไปดาวน์โหลดจาก seeder ไม่กี่รายที่อยู่หลัง ISP รัสเซีย
แล้วพอภายหลังค่าจากการทดลองกับค่าที่คำนวณได้เริ่มไม่ตรงกันบ่อย ๆ ถึงค่อยสงสัยว่าสำเนาเถื่อนนั้นอาจถูกดัดแปลงโดยเจตนา
อย่างไรก็ตาม ตอนนี้ประเทศคู่สงครามนั้นอาจหาเอาสำเนาถูกลิขสิทธิ์ออกมาจากเครือข่ายที่ถูกแฮ็กของมหาวิทยาลัยสุ่ม ๆ หรือบริษัทที่ปรึกษาด้านอวกาศ การบิน หรือกลาโหมได้ง่ายกว่า
และการคิดว่าประเทศคู่สงครามในปี 2026 จะไม่สามารถสร้างซอฟต์แวร์ขึ้นมาเองตั้งแต่ต้นได้เลยก็คงไร้เดียงสาเกินไป แถมยังอาจไปถึงผลลัพธ์ที่ต้องการได้ด้วยการคำนวณมือหรือการทดลองอีกด้วย
ท้ายที่สุดแล้ว การตรวจสอบคุณภาพการผลิตก็จำเป็นต้องมีอุปกรณ์และความสามารถในการทดลองอยู่แล้วแต่เดิม
ซอฟต์แวร์จำลอง มีหน้าที่หลักเพื่อช่วยลดจำนวนครั้งของการสร้างต้นแบบและการทดลองทางกายภาพ เพื่อประหยัดต้นทุนและเวลา
ตัวอย่างเช่น การรันสถานการณ์ที่กระสุนปืนใหญ่ชนแผ่นเกราะ 1000 ครั้งแบบ [3] นั้นราคาถูก แต่ถ้าทำซ้ำในโลกจริงจะทั้งแพงและใช้เวลามากกว่ามาก
[1] https://ftp.lstc.com/anonymous/outgoing/jday/manuals/LS-DYNA...
[2] https://www.osti.gov/servlets/purl/6530310
[3] https://www.youtube.com/watch?v=_dv2PecKUBM
เวลาคนเห็นว่าของที่ผมเผยแพร่มี ข้อมูล revision ของ RCS ติดมาด้วย ผมก็หวังว่าพวกเขาจะชะงักไปสักนิด
หนังสือที่เพิ่งอ่านไม่นานมานี้คือ Sandworm: A New Era of Cyberwar and the Hunt for the Kremlin's Most Dangerous Hackers ของ Andy Greenberg
มันดีมาก และเพราะยังมีข้อมูลใหม่ออกมาเรื่อย ๆ ผมเลยคิดว่าอาจถึงขั้นควรมีภาคต่อได้เลย
พอเห็นว่า Guix กับการคอมพิวต์แบบทำซ้ำได้กำลังพอร์ตไปถึง PowerPC หรือเครื่อง legacy ได้ ก็รู้สึกว่ารัฐบาลหรือองค์กรแบบ 1984 รวมถึงบางกลุ่มในตะวันออกกลางคงไม่ชอบสิ่งนี้เอามาก ๆ
ยิ่งสภาพแวดล้อม ต่างสถาปัตยกรรม มากเท่าไร ก็ยิ่งได้เปรียบมากขึ้น
ตัวเลขสำคัญคือ หนอน
มันไม่ถูกตรวจพบบนคอมพิวเตอร์เครื่องอื่นด้วย เพราะตั้งแต่แรกก็ไม่มีคอมพิวเตอร์เครื่องที่สองที่สะอาดจริง ๆ อยู่แล้ว
เป็นการค้นพบที่น่าสนใจ แต่คอมเมนต์เรื่อง การจัดการซอร์สโค้ด ดูเหมือนจะคลาดเคลื่อนไปนิดหน่อย
ตอนนั้นของแนว SCCS ก็น่าจะยังมีหลงเหลืออยู่บ้าง และผมเองก็แอบลังเลอยู่ครู่หนึ่งว่า CVS จัดเป็นสไตล์คล้ายกันหรือเปล่า
ซึ่งบ่งชี้ว่านักพัฒนาน่าจะเป็นคนที่เดิมทำงานฝั่ง UNIX มาด้วย เพราะในฝั่งนั้น SCCS/RCS เป็นเรื่องปกติ