המידע הזה מיועד למפתחים שהאפליקציות שלהם מכילות הצפנה שעושה שימוש במצב AES/ECB הפחות מאובטח. הצפנת תוכן תוך שימוש במצב החלש הזה עלולה להוביל לפרטים מוצפנים (ciphertext) פגיעים ולסכן את נתוני המשתמשים. ניתן למצוא את המיקומים של מצבי ההצפנה הפחות מאובטחים באפליקציה שלכם בהתראה של Play Console לאפליקציה. אם מיקום מסתיים ב-“(בקוד שנטען באופן דינמי)” אז המיקום נמצא בקוד שנטען באופן דינמי על ידי האפליקציה או על ידי ספריות שמשמשות את האפליקציה. אפליקציות משתמשות בדרך כלל בקוד שנטען באופן דינמי באמצעות מסירת תכונות על פי דרישה, אבל קיימות טכניקות לא מומלצות אחרות (חלק מהטכניקות הלא מומלצות מפרות גם את המדיניות של Google Play ואין להשתמש בהן). בנוסף, Packers יכולים להפוך קוד אפליקציה לקוד שנטען באופן דינמי.
הנחיות לתיקון התראות על 'מצב של הצפנה קריפטוגרפית לא בטוחה'
מיצאו באפליקציה שלכם את המקום שבו נוצר האובייקטהצפנה. מצבי ההגדרות הבאים יצביעו על שימוש במצב AES/ECB הלא בטוח:
"AES"
"AES/ECB/NoPadding"
"AES/ECB/PKCS5Padding"
"AES/ECB/ISO10126Padding"
לדוגמה, הקוד הבא משתמש במצב AES/ECB כברירת מחדל כי סופקה לו ההגדרה "AES":
// התראת המסוף מתייחסת לשיטה הזו
public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
Cipher cipher = Cipher.getInstance(“AES”); // Employs AES/ECB mode by default
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
return cipher.doFinal(plainText);
}
Google ממליצה למפתחים להשתמש ב-“AES/GCM/NoPadding”
במקום במצב הלא בטוח שצוין למעלה.
השלבים הבאים
- מעדכנים את האפליקציה לפי השלבים המודגשים למעלה.
- נכנסים לחשבון Play Console ומעלים את הגרסה המעודכנת של האפליקציה.
במהלך הבדיקה של הבקשה שלכם, הסטטוס של האפליקציה החדשה או העדכון שהעליתם יהיה בהמתנה לפרסום. אם האפליקציה לא תעודכן כראוי, האזהרה עדיין תופיע.
אנחנו כאן כדי לעזור
אם יש לכם שאלות טכניות בנוגע לפגיעוּת זו, ניתן לפרסם פוסט באתר Stack Overflow ולהשתמש בתג “android-security”.