- เครื่องมือทำ instrumentation อัตโนมัติที่ปลอดภัยและเชื่อถือได้สำหรับแอปพลิเคชัน Go ซึ่งพัฒนาโดย Datadog
- แทรก instrumentation ในขั้นตอนคอมไพล์เพื่อลด runtime overhead ให้น้อยที่สุด
- ปกป้องแอปพลิเคชันด้วยความสามารถ RASP
- แก้ไขซอร์สโค้ดระหว่างกระบวนการคอมไพล์เพื่อแทรก instrumentation สำหรับการติดตาม Datadog APM โดยอัตโนมัติ
- ปกป้องแอปพลิเคชันจากช่องโหว่ทั่วไปด้วยความสามารถ Exploit Prevention ของ Datadog Application Security Management
วิธีการทำงาน
- ทำงานร่วมกับ Go toolchain เพื่อวิเคราะห์และแก้ไขซอร์สโค้ดระหว่างกระบวนการคอมไพล์
- จัดการโค้ดในระดับ Abstract Syntax Tree (AST) เพื่อให้ Go compiler ตรวจสอบความเปลี่ยนแปลงทั้งหมดและทำ type checking
- ช่วยให้เข้าถึงพฤติกรรมทั้งหมดของแอปพลิเคชันได้อย่างไร้ข้อจำกัด พร้อมหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดจากการแก้ไขไบนารีที่คอมไพล์แล้วโดยตรง
- โค้ดที่แก้ไขแล้วจะผ่านกระบวนการ optimization ของ Go compiler ทำให้ลด runtime overhead ได้
- แทรกคำสั่ง pragma
//line ของ Go ลงในซอร์สโค้ดที่แก้ไข เพื่อไม่ให้การแก้ไขส่งผลต่อเลขบรรทัด และทำให้ stack trace ที่สร้างจากแอปพลิเคชันที่ถูกทำ instrumentation ชี้ไปยังตำแหน่งที่ถูกต้องในซอร์สโค้ดต้นฉบับ
เหตุผลที่ใช้ instrumentation แบบคอมไพล์ไทม์
- ความปลอดภัย ความน่าเชื่อถือ และคุณภาพข้อมูล: instrumentation แบบคอมไพล์ไทม์สร้างข้อมูลที่ปลอดภัยและเชื่อถือได้มากกว่าการ patch ไบนารีหรือ eBPF
- ระบบอัตโนมัติ: การ patch ไบนารีและ eBPF ให้ระบบอัตโนมัติในระดับสูง แต่ Orchestrion ต้องมีการเปลี่ยนแปลงกระบวนการ build และต้อง deploy แอปพลิเคชันใหม่
- Performance overhead: eBPF อาจมี performance overhead จากการสลับ context ระหว่าง kernel กับ user space ส่วน Orchestrion แทรก instrumentation ตอนคอมไพล์ จึงลด runtime overhead ได้มากที่สุด
- สภาพแวดล้อมที่รองรับ: eBPF ถูกจำกัดอยู่ในสภาพแวดล้อม Linux แต่ Orchestrion รองรับสภาพแวดล้อมที่หลากหลาย
- ความสามารถโดยรวม: eBPF มีความสามารถค่อนข้างจำกัด แต่ Orchestrion ทำงานในระดับโค้ดจึงให้ความสามารถได้มากกว่า
Orchestrion สำหรับความปลอดภัย
- ใช้งานความสามารถ RASP โดยแทรก instrumentation ที่สามารถเปลี่ยน control flow ของโปรแกรมได้ผ่านการทำงานในระดับโค้ด
- สามารถปกป้องแอปพลิเคชันได้ด้วยตัวเองจากช่องโหว่ทั่วไป เช่น SQL injection หรือ local file inclusion
- สามารถแทนที่ API หนึ่งด้วยอีก API หนึ่งได้อย่างสมบูรณ์ ทำให้นักพัฒนาไม่จำเป็นต้องคอยกังวลเรื่องการส่งค่า context ผ่านทุกชั้นของ business logic เพื่อทำ tracing context chaining
ยังไม่มีความคิดเห็น