กฎข้อแรกของความปลอดภัยของแอพ:เครื่องใดก็ตามที่ผู้โจมตีได้รับสิทธิ์การเข้าถึงแบบฟิสิคัลหรืออิเลคทรอนิคส์แบบไม่ จำกัด ในตอนนี้จะเป็นของผู้โจมตีของคุณไม่ว่าจะอยู่ที่ไหนหรือจ่ายจริง
กฎข้อที่สองของความปลอดภัยของแอพ:ซอฟต์แวร์ใด ๆ ที่ปล่อยให้ขอบเขตทางกายภาพอยู่ภายในซึ่งผู้โจมตีไม่สามารถเจาะเข้าไปได้ในตอนนี้จะเป็นของผู้โจมตีของคุณไม่ว่าคุณจะใช้เวลาในการเข้ารหัสนานเท่าใดก็ตาม
กฎข้อที่สาม:ข้อมูลใด ๆ ที่ทำให้เกิดขอบเขตทางกายภาพแบบเดียวกันกับที่ผู้โจมตีไม่สามารถเจาะเข้าไปได้นั้นเป็นของผู้โจมตีของคุณไม่ว่ามันจะมีค่ากับคุณแค่ไหน
รากฐานของความปลอดภัยของเทคโนโลยีสารสนเทศนั้นตั้งอยู่บนหลักการพื้นฐานทั้งสามนี้ คอมพิวเตอร์ที่ปลอดภัยเพียงเครื่องเดียวเท่านั้นคือคอมพิวเตอร์ที่ถูกล็อคอยู่ในตู้นิรภัยภายในกรง Farraday ภายในกรงเหล็ก มีคอมพิวเตอร์ที่ใช้บริการส่วนใหญ่อยู่ในสถานะนี้ ปีละครั้ง (หรือน้อยกว่า) พวกเขาสร้างกุญแจส่วนตัวสำหรับผู้ออกใบรับรองหลักที่เชื่อถือได้ (หน้าโฮสต์ของพยานด้วยกล้องบันทึกทุกนิ้วของห้องที่พวกเขาอยู่)
ตอนนี้คอมพิวเตอร์ส่วนใหญ่ไม่ได้ใช้ภายใต้สภาพแวดล้อมประเภทนี้ พวกมันอยู่ในที่โล่งซึ่งเชื่อมต่อกับอินเทอร์เน็ตผ่านช่องวิทยุไร้สาย กล่าวโดยย่อคือพวกเขามีความเสี่ยงเช่นเดียวกับซอฟต์แวร์ของพวกเขา ดังนั้นจึงไม่น่าเชื่อถือ มีบางสิ่งที่คอมพิวเตอร์และซอฟต์แวร์ของพวกเขาจะต้องรู้หรือทำเพื่อให้มีประโยชน์ แต่ต้องระมัดระวังเพื่อให้แน่ใจว่าพวกเขาไม่สามารถรู้หรือทำพอที่จะทำให้เกิดความเสียหาย (อย่างน้อยก็ไม่ใช่ความเสียหายถาวรนอกขอบเขตของเครื่องเดียว )
คุณรู้ทั้งหมดนี้แล้ว นั่นเป็นสาเหตุที่คุณพยายามปกป้องรหัสของแอปพลิเคชันของคุณ แต่ปัญหาอยู่ที่นั้น เครื่องมือทำให้งงงวยสามารถทำให้รหัสเป็นระเบียบสำหรับมนุษย์ที่จะพยายามขุดผ่าน แต่โปรแกรมยังคงมีการเรียกใช้; นั่นหมายถึงการไหลตรรกะที่แท้จริงของแอพและข้อมูลที่ใช้จะไม่ได้รับผลกระทบจากความสับสน ด้วยความดื้อรั้นเล็กน้อยผู้โจมตีสามารถยกเลิกการทำให้งงงวยรหัสและไม่จำเป็นแม้แต่ในบางกรณีที่สิ่งที่เขามองไม่สามารถเป็นอย่างอื่นได้ แต่สิ่งที่เขากำลังมองหา
คุณควรพยายามทำให้มั่นใจว่าผู้โจมตีไม่สามารถทำอะไรกับรหัสของคุณได้ไม่ว่าเขาจะได้รับสำเนาที่ชัดเจนได้ง่ายเพียงใดก็ตาม นั่นหมายความว่าไม่มีความลับแบบเข้ารหัสเพราะความลับเหล่านั้นไม่เป็นความลับทันทีที่รหัสออกจากอาคารที่คุณพัฒนาขึ้น
คีย์ - ค่าเหล่านี้ที่คุณมีฮาร์ดโค้ดควรถูกลบออกจากซอร์สโค้ดของแอปพลิเคชันโดยสิ้นเชิง แต่ควรเป็นหนึ่งในสามแห่ง หน่วยความจำที่ระเหยได้บนอุปกรณ์ซึ่งเป็นเรื่องยาก (แต่ก็ยังเป็นไปไม่ได้) สำหรับผู้โจมตีที่จะได้รับสำเนาออฟไลน์ ถาวรในเซิร์ฟเวอร์คลัสเตอร์ที่คุณควบคุมการเข้าถึงด้วยกำปั้นเหล็ก; หรือในแหล่งข้อมูลที่สองที่ไม่เกี่ยวข้องกับอุปกรณ์หรือเซิร์ฟเวอร์ของคุณเช่นการ์ดจริงหรือในความทรงจำของผู้ใช้ของคุณ (ซึ่งหมายความว่าในที่สุดมันจะอยู่ในหน่วยความจำที่ระเหยได้
พิจารณาโครงร่างต่อไปนี้ ผู้ใช้ป้อนข้อมูลรับรองสำหรับแอปจากหน่วยความจำในอุปกรณ์ คุณต้องเชื่อมั่นว่าอุปกรณ์ของผู้ใช้นั้นยังไม่ได้รับอันตรายจาก keylogger หรือ Trojan; สิ่งที่ดีที่สุดที่คุณสามารถทำได้ในเรื่องนี้คือการใช้ความปลอดภัยแบบหลายปัจจัยโดยการจดจำข้อมูลที่ระบุตัวตนได้ยากเกี่ยวกับอุปกรณ์ที่ผู้ใช้ใช้ (MAC / IP, IMEI, ฯลฯ ) และให้ช่องทางเพิ่มเติมอย่างน้อยหนึ่งช่อง ความพยายามในการเข้าสู่ระบบบนอุปกรณ์ที่ไม่คุ้นเคยซึ่งสามารถตรวจสอบได้
ข้อมูลประจำตัวที่ป้อนครั้งเดียวจะสับสนโดยซอฟต์แวร์ไคลเอนต์ (ใช้แฮชที่ปลอดภัย) และข้อมูลประจำตัวของข้อความล้วนทิ้ง; พวกเขามีจุดประสงค์ ข้อมูลประจำตัวที่ยุ่งเหยิงจะถูกส่งผ่านช่องทางที่ปลอดภัยไปยังเซิร์ฟเวอร์ที่รับรองความถูกต้องซึ่งจะทำการแฮชอีกครั้งเพื่อสร้างข้อมูลที่ใช้ในการตรวจสอบความถูกต้องของการเข้าสู่ระบบ ด้วยวิธีนี้ลูกค้าไม่เคยรู้ว่าสิ่งที่จริงเมื่อเทียบกับค่าฐานข้อมูลเซิร์ฟเวอร์แอปไม่เคยรู้ข้อมูลประจำตัวของธรรมดาที่สิ่งที่ได้รับสำหรับการตรวจสอบความถูกต้องเซิร์ฟเวอร์ข้อมูลไม่เคยรู้ว่าข้อมูลที่เก็บไว้สำหรับการตรวจสอบ ตรงกลางเห็นซึ่งพูดไม่ชัดเท่านั้นแม้ว่าช่องทางที่ปลอดภัยถูกโจมตี
เมื่อตรวจสอบแล้วเซิร์ฟเวอร์จะส่งสัญญาณโทเค็นกลับไปที่ช่อง โทเค็นมีประโยชน์เฉพาะในเซสชั่นที่ปลอดภัยประกอบด้วยเสียงรบกวนแบบสุ่มหรือคัดลอกตัวระบุเซสชันและเข้ารหัส (และตรวจสอบได้) และแอปพลิเคชันไคลเอนต์จะต้องส่งโทเค็นนี้ในช่องทางเดียวกันไปยังเซิร์ฟเวอร์ ทำอะไรบางอย่าง. แอปพลิเคชันไคลเอนต์จะทำเช่นนี้หลายครั้งเพราะไม่สามารถทำสิ่งใด ๆ ที่เกี่ยวข้องกับเงินข้อมูลที่ละเอียดอ่อนหรือสิ่งอื่นใดที่อาจสร้างความเสียหายด้วยตัวเอง ต้องขอให้เซิร์ฟเวอร์ทำภารกิจนี้แทน แอปพลิเคชันไคลเอนต์จะไม่เขียนข้อมูลที่ละเอียดอ่อนใด ๆ ไปยังหน่วยความจำถาวรบนอุปกรณ์นั้นอย่างน้อยก็ไม่ใช่ข้อความธรรมดา ลูกค้าสามารถถามเซิร์ฟเวอร์ผ่านช่องทางที่ปลอดภัยสำหรับคีย์สมมาตรเพื่อเข้ารหัสข้อมูลในเครื่องใด ๆ ที่เซิร์ฟเวอร์จะจดจำ ในเซสชั่นในภายหลังลูกค้าสามารถขอเซิร์ฟเวอร์สำหรับคีย์เดียวกันเพื่อถอดรหัสข้อมูลเพื่อใช้ในหน่วยความจำที่ระเหยได้ ข้อมูลนั้นจะไม่เป็นเพียงสำเนาเท่านั้น ทุกสิ่งที่ลูกค้าจัดเก็บควรส่งในบางรูปแบบไปยังเซิร์ฟเวอร์
เห็นได้ชัดว่าสิ่งนี้ทำให้แอปพลิเคชันของคุณขึ้นอยู่กับการเข้าถึงอินเทอร์เน็ตเป็นอย่างมาก อุปกรณ์ไคลเอนต์ไม่สามารถทำหน้าที่พื้นฐานใด ๆ โดยไม่ต้องมีการเชื่อมต่อและการตรวจสอบความถูกต้องโดยเซิร์ฟเวอร์ ไม่แตกต่างจาก Facebook จริงๆ
ตอนนี้คอมพิวเตอร์ที่ผู้โจมตีต้องการคือเซิร์ฟเวอร์ของคุณเพราะไม่ใช่แอพ / อุปกรณ์ของลูกค้าเป็นสิ่งที่สามารถสร้างรายได้ให้กับเขาหรือทำให้คนอื่นเจ็บปวดสำหรับความเพลิดเพลินของเขา ไม่เป็นไร; คุณได้รับผลตอบแทนที่มากกว่าจากการใช้จ่ายเงินและความพยายามในการรักษาความปลอดภัยเซิร์ฟเวอร์มากกว่าการพยายามรักษาความปลอดภัยให้กับลูกค้าทั้งหมด เซิร์ฟเวอร์สามารถอยู่ด้านหลังไฟร์วอลล์ทุกชนิดและความปลอดภัยทางอิเล็กทรอนิกส์อื่น ๆ และนอกจากนี้ยังสามารถรักษาความปลอดภัยทางกายภาพหลังเหล็กคอนกรีตการเข้าถึงคีย์การ์ด / พินและการเฝ้าระวังวิดีโอตลอด 24 ชั่วโมง ผู้โจมตีของคุณจะต้องมีความซับซ้อนอย่างแท้จริงเพื่อเข้าถึงเซิร์ฟเวอร์ชนิดใด ๆ โดยตรงและคุณ (ควร) รู้เกี่ยวกับมันทันที
วิธีที่ดีที่สุดที่ผู้โจมตีสามารถทำได้คือขโมยโทรศัพท์และข้อมูลประจำตัวของผู้ใช้และล็อกอินเข้าสู่เซิร์ฟเวอร์ด้วยสิทธิ์ที่ จำกัด ของลูกค้า หากสิ่งนี้เกิดขึ้นเช่นเดียวกับการสูญเสียบัตรเครดิตผู้ใช้ที่ถูกกฎหมายควรได้รับคำสั่งให้โทรไปยังหมายเลข 800 (ควรจดจำได้ง่ายกว่าและไม่ใช่ด้านหลังของบัตรที่พวกเขาพกติดตัวไว้ในกระเป๋าเงินกระเป๋าสตางค์หรือกระเป๋าเอกสาร ถูกขโมยไปพร้อมกับอุปกรณ์พกพา) จากโทรศัพท์ทุกเครื่องที่พวกเขาสามารถเข้าถึงที่เชื่อมต่อโดยตรงกับบริการลูกค้าของคุณ พวกเขาระบุว่าโทรศัพท์ของพวกเขาถูกขโมยระบุตัวระบุพื้นฐานบางอย่างและบัญชีถูกล็อคธุรกรรมใด ๆ ที่ผู้โจมตีอาจได้รับการดำเนินการจะถูกย้อนกลับและผู้โจมตีกลับไปที่ช่องสี่เหลี่ยมหนึ่ง