การสื่อสารเซิร์ฟเวอร์แอพที่ปลอดภัยของ iPhone


14

อะไรจะเป็นวิธีที่ดีที่สุดในการบรรลุการสื่อสารส่วนตัวระหว่างแอพ iOS และส่วนประกอบเซิร์ฟเวอร์ การมี“ คีย์ลับ” ที่ไม่มีการเปลี่ยนแปลงเดียวถูกอบเข้าในแหล่งที่มาของแอปเพียงพอหรือไม่หรือฉันต้องตั้งค่ารุ่นของคีย์“ จับมือ” ดังกล่าวแบบไดนามิกบ้างไหม?

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

ส่วนประกอบของเซิร์ฟเวอร์ทำงานบน RoR ถ้าสำคัญ

คำตอบ:


8

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

มันเป็นคำถามเพื่อความปลอดภัยดังนั้นเราจะมาอธิบายรูปแบบการคุกคามและกลยุทธ์การลดความเสี่ยง

สมมติว่าคุณมีการกดปุ่ม URL ซึ่งอาจมีค่าใช้จ่ายที่เห็นได้ชัดเจน (เช่นต้นทุนการประมวลผล) และคุณต้องการปกป้องทั้งจากการโจมตี DoS อย่างง่ายและจากแอปเลียนแบบ

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

ตอนนี้บางคนไม่สามารถเรียนรู้ URL ที่มีราคาแพงได้โดยเพียงแค่เรียกใช้แพ็คเก็ตดมกลิ่นหรือโดยดูที่สตริงเหมือน URL ในรหัสของคุณ ผู้โจมตีที่มีศักยภาพต้องถอดรหัสแอปของคุณ

คุณไม่สามารถป้องกันรหัสของคุณจากการถูก decompiled และ / หรือทำงานภายใต้ดีบักเกอร์ ในที่สุดผู้โจมตีก็จะเรียนรู้ถึงรหัสลับและลำดับการเชื่อมต่อ

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

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

ดูการสลับฐานผู้ใช้ของคุณเป็นเวอร์ชันที่อัปเดตแล้ว เค้น URL ที่มีค่าใช้จ่ายสูงและ 404 ในที่สุด คุณได้ลดการละเมิดความปลอดภัยโดยหวังว่าจะไม่สูญเสียมากเกินไป กลับไปที่ตารางหนึ่ง

คำเตือน: ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัย


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

@aleemb: แน่นอนคุณไม่สามารถเก็บ URL ที่มีค่าใช้จ่ายเป็นความลับได้อย่างสมบูรณ์ ผู้โจมตีที่มุ่งมั่นจะค้นพบมัน ประเด็นก็คือการทำให้การค้นพบนี้มีค่าใช้จ่ายสูงดังนั้น "ตัวเล็กสคริปต์" จะมีเวลา (เอ้อ) ยากและมีแรงจูงใจน้อยกว่าในการขุดหาและใช้ประโยชน์และทำให้การบรรเทาเป็นไปได้ หากค่าใช้จ่ายในการบรรเทาของคุณต่ำพอสมควรและค่าใช้จ่ายในการค้นพบผู้โจมตีนั้นสูงเมื่อเทียบกับสิ่งที่ผู้โจมตีสามารถสกัดได้จากการใช้ URL ที่มีราคาแพงการโจมตีจะไม่มีจุดหมาย นี่ไม่ใช่ความปลอดภัยที่เข้มงวดอีกครั้ง
9000

5

คุณมีปัญหาคลาสสิคที่แก้ไม่ได้จริงๆ

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

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

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

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


0

นี่คือสิ่งที่TLS และ SSLมีการ หนึ่งสามารถสร้างการเชื่อมต่อที่ปลอดภัยโดยไม่ต้องใช้รหัสลับคงที่ อ่านส่วนคำอธิบายในหน้าเชื่อมโยงเพื่อเรียนรู้วิธีการทำเช่นนี้

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


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