โปรโตคอลการสร้างอักขระ
| โปรโตคอลการสื่อสาร | |
| คำย่อ | ชาร์จเจน |
|---|---|
| วัตถุประสงค์ |
|
| นักพัฒนา | จอน โพสเทล |
| การแนะนำ | 1983 ( 1983 ) |
| เลเยอร์ OSI | ชั้นแอปพลิเคชัน (7) |
| ท่าเรือ | tcp/19, udp/19 |
| อาร์เอฟซี | 864 |
| ชุดโปรโตคอลอินเทอร์เน็ต |
|---|
| ชั้นแอปพลิเคชัน |
| ชั้นการขนส่ง |
| ชั้นอินเทอร์เน็ต |
| เลเยอร์เชื่อมโยง |
โปรโตคอลสร้างอักขระ ( CHARGEN ) เป็นบริการของชุดโปรโตคอลอินเทอร์เน็ตที่กำหนดไว้ในRFC 864ในปี 1983 โดยJon Postelมีวัตถุประสงค์เพื่อการทดสอบ การดีบัก และการวัดผล โปรโตคอลนี้ไม่ค่อยได้ใช้ เนื่องจากข้อบกพร่องในการออกแบบทำให้สามารถนำไปใช้ในทางที่ผิดได้ง่าย[ 1 ]
โฮสต์สามารถเชื่อมต่อกับเซิร์ฟเวอร์ที่รองรับโปรโตคอล Character Generator (CPT) บนพอร์ตหมายเลข 19 ของ Transmission Control Protocol (TCP) หรือUser Datagram Protocol (UDP) ก็ได้ เมื่อเปิดการเชื่อมต่อ TCP เซิร์ฟเวอร์จะเริ่มส่งอักขระแบบสุ่มไปยังโฮสต์ที่เชื่อมต่อ และจะดำเนินการต่อไปจนกว่าโฮสต์จะปิดการเชื่อมต่อ ในการใช้งานโปรโตคอล UDP เซิร์ฟเวอร์จะส่งดาตาแกรม UDP ที่มีอักขระแบบสุ่ม (ระหว่าง 0 ถึง 512) ทุกครั้งที่ได้รับดาตาแกรมจากโฮสต์ที่เชื่อมต่อ ข้อมูลใดๆ ที่เซิร์ฟเวอร์ได้รับจะถูกทิ้งไป
การใช้งาน Inetd
ใน ระบบปฏิบัติการ ที่คล้าย Unix ส่วนใหญ่ เซิร์ฟเวอร์ CHARGEN จะถูกติดตั้งมาพร้อมกับdaemon inetdหรือxinetd บริการ CHARGEN มักจะไม่ได้เปิดใช้งานโดยค่าเริ่มต้น สามารถเปิดใช้งานได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์/etc/inetd.confและสั่งให้ inetd โหลดการกำหนดค่าใหม่:
chargen stream tcp nowait root internal chargen dgram udp wait root internal
แอปพลิเคชัน
บริการ CHARGEN อาจใช้เป็นแหล่งข้อมูลไบต์สตรีมสำหรับการดีบักโค้ดเครือข่าย TCP เพื่อตรวจสอบขอบเขตและการจัดการบัฟเฟอร์อย่างถูกต้อง นอกจากนี้ยังอาจใช้เป็นแหล่งข้อมูลเพย์โหลดทั่วไปสำหรับการวัดแบนด์วิดท์และ/หรือการปรับแต่งคุณภาพบริการ (QoS) ควรพิจารณาหากมีการใช้งานการบีบอัดฮาร์ดแวร์ เนื่องจากเอาต์พุตจากบริการ CHARGEN สามารถบีบอัดได้อย่างง่ายดายและมีประสิทธิภาพ การบีบอัดนี้อาจทำให้การทดสอบแบนด์วิดท์รายงานขนาดของข้อมูลหลังการคลายการบีบอัด แทนที่จะเป็นปริมาณข้อมูลจริงที่ส่งผ่านเครือข่าย
ตัวอย่างเซสชั่น
โดยทั่วไปแล้ว เซสชันบริการ CHARGEN จะมีลักษณะดังนี้: ผู้ใช้เชื่อมต่อกับโฮสต์โดยใช้ ไคลเอนต์ telnetผู้ใช้จะได้รับสตรีมของไบต์ แม้ว่า RFC 864จะไม่ได้กำหนดรูปแบบเฉพาะของเอาต์พุตแต่รูปแบบที่แนะนำ (และมาตรฐานโดยพฤตินัย ) คือบรรทัดที่ มีอักขระASCII 72 ตัวเรียงสลับกัน
$ telnet localhost chargen กำลังลอง 127.0.0.1... เชื่อมต่อกับ localhost แล้ว อักขระหลีกเลี่ยงคือ '^]' !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij $%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk %&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl &'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno )*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop *+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq +,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv 0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw 123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx 23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy 3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz 456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ 56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| 6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} 789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} 89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ! 9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !" :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"# ;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$ <=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$% =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%& >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&' ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'( @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'() ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()* BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+ CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+, DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,- EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-. FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./ GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0 HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./01 IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./012 JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123 KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./01234 LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./012345 MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456 NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./01234567 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./012345678 PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789 QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789: RSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:; STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;< TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<= UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=> VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>? WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@A YZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@AB Z[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABC [\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCD \]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDE ]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF ^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG _`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH `abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ bcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK cdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL defghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM efghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN fghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO ghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP hijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ ijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR jklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS klmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST lmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU mnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV nopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW opqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX pqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY qrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ rstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ stuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ tuvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] uvwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ vwxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ wxyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` xyz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a yz{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab z{|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc {|} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd |} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde } !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi ^] telnet> ออก การเชื่อมต่อถูกตัดแล้ว กระบวนการนี้จะดำเนินต่อไปจนกว่าการเชื่อมต่อ TCP จะถูกปิด ดังที่แสดงในบันทึกการติดตาม โดยการยุติเซสชัน telnet
การจำลองผลลัพธ์ทางภาพ
เพื่อความปลอดภัย เครื่องคอมพิวเตอร์สมัยใหม่ส่วนใหญ่ควรปิดใช้งานบริการ CHARGEN ต่อไปนี้คือสคริปต์ bash ของ Linux ที่จะจำลองลักษณะการแสดงผลของบริการ CHARGEN ในหน้าต่างเทอร์มินัล สามารถหยุดสคริปต์ได้โดยการกดปุ่มCtrl+C
strg = "" ; สำหรับ n ใน{ 32 ..126 } ; ทำc = ` printf '%x' $n | xxd -r -p ` ; strg = ${ strg }${ c } ; เสร็จแล้ว; strg = ${ strg }${ strg } ; n = 0 ; ในขณะที่ : ; ทำม. = n%95 ; เสียงสะท้อน" ${ strg : m : 72 } " ; n = $(( n + 1 )) ;นอน.1 ; เสร็จแล้ว;ใช้ในทางที่ผิด
บริการนี้ถูกใช้ในทางที่ผิดเพื่อทำให้เซิร์ฟเวอร์ชื่อโดเมน (DNS) ของ Microsoft ที่ทำงานบน Windows NT 4.0 ล่ม โดยการส่งอักขระแบบสุ่มเข้าไปในพอร์ตการฟังของเซิร์ฟเวอร์ DNS โดยตรง ( ) [ 2 ] [ 3 ]อย่างไรก็ตาม การโจมตีอาจเป็นอาการของการจัดการบัฟเฟอร์ที่ไม่เหมาะสมในส่วนของบริการ DNS ของ Microsoft และไม่เกี่ยวข้องโดยตรงกับบริการ CHARGENtelnet ntbox 19 | telnet ntbox 53
UDP CHARGEN มักใช้ในการโจมตีแบบปฏิเสธการให้บริการ (Denial-of-Service) โดยการใช้ที่อยู่ต้นทางปลอม ผู้โจมตีสามารถส่งข้อมูลแบบตีกลับ (bounce traffic) จากแอปพลิเคชัน UDP CHARGEN ไปยังเหยื่อได้ UDP CHARGEN ส่งข้อมูลมากกว่าที่ได้รับถึง 200 ถึง 1,000 เท่า ขึ้นอยู่กับการใช้งาน การ "ทวีคูณปริมาณการรับส่งข้อมูล" นี้ยังดึงดูดใจผู้โจมตีเพราะมันปกปิดที่อยู่ IP ของผู้โจมตีจากเหยื่อได้
CHARGEN ถูกนำไปใช้อย่างแพร่หลายในเครื่องพิมพ์ที่เชื่อมต่อกับเครือข่าย เนื่องจากเฟิร์มแวร์ของเครื่องพิมพ์รุ่นเก่าๆ มักไม่ได้รับการอัปเดตก่อนที่จะมีการค้นพบ CHARGEN และข้อกังวลด้านความปลอดภัยอื่นๆ จึงอาจยังมีเครื่องพิมพ์ที่เชื่อมต่อกับเครือข่ายจำนวนมากที่ยังคงใช้โปรโตคอลนี้อยู่ และในกรณีที่เครื่องพิมพ์เหล่านี้สามารถมองเห็นได้จากอินเทอร์เน็ต พวกมันมักถูกนำไปใช้ในทางที่ผิดเพื่อเป็นช่องทางในการโจมตีแบบปฏิเสธการให้บริการ (Denial of Service) ผู้โจมตีมักจะสแกนเครือข่ายเพื่อค้นหาแหล่งที่มาของ CHARGEN บนพอร์ต UDP 19
มัลแวร์ CHARGEN แพร่หลายในเครื่องพิมพ์ จนถึงขั้นที่มัลแวร์ประเภท Distributed Denial of Serviceบางตัวใช้พอร์ต UDP 19 ในการโจมตี โดยมีเป้าหมายเพื่อเบี่ยงเบนความสนใจของเจ้าหน้าที่สืบสวน ให้พวกเขาไปค้นหาเครื่องพิมพ์เก่าแทนที่จะเป็นคอมพิวเตอร์ที่ถูกดัดแปลง