Maison  >  Article  >  Vulnérabilité « vérification du tas »

Vulnérabilité « vérification du tas »

WBOY
WBOYavant
2024-02-22 12:46:06452parcourir

L'éditeur PHP Yuzai vous propose aujourd'hui une séance de questions-réponses Java sur la vulnérabilité "heap check". Dans le processus de développement logiciel, la vérification du tas est une vulnérabilité de sécurité courante qui peut être facilement exploitée par les pirates pour des attaques malveillantes. Grâce au format questions-réponses de cet article, nous vous donnerons une compréhension approfondie de la définition, des principes et des méthodes de prévention des vulnérabilités d'inspection du tas, vous aidant ainsi à mieux protéger la sécurité de votre système logiciel.

Contenu de la question

Je dois transmettre un mot de passe pour l'appel. Si je fais ça

byte[] datasourcepasswddecoded = base64.getdecoder().decode(datasourcepasswdencoded);
string datasourcepasswd = new string(datasourcepasswddecoded);
hikaridatasource.setpassword(datasourcepasswd);

Lorsque Fortify a analysé ce code, il a été signalé que le code présentait une vulnérabilité de « vérification du tas » en raison de l'attribution de mots de passe aux chaînes.

fortify ne se plaindra pas du code original :

hikaridatasource.setpassword(env.getproperty("spring.datasource.password"));

Même si env.getproperty() renvoie une chaîne.

fortify recommande :

private JPasswordField pf;
...
final char[] password = pf.getPassword();
// use the password
...
// erase when finished
Arrays.fill(password, ' ');

Mais comment utiliser char[] comme mot de passe lorsque la fonction attend une chaîne ?

Solution de contournement

Oui... L'encodage Base64 du mot de passe n'est pas du tout protecteur. Tout hacker doté d’un demi-cerveau sait identifier et décoder le base64. Donc vos "trucs bizarres en base64" n'aident pas.

Mais d'un autre côté, votre scanner de vulnérabilités a signalé un problème relativement difficile à exploiter et qui ne pourra probablement pas être résolu de toute façon.

À un moment donné dans l'application (ses dépendances ou quelque part), le mot de passe sera converti en Java String ...因为某些 API 需要 String。此时,无论扫描器是否告诉您,您都存在“堆检查”漏洞。例如,如果数据源使用 JDBC,则需要将该密码作为参数传递给 DriverManager.connect 调用。 connect Il y a 3 surcharges... mais elles nécessitent toutes de transmettre le mot de passe sous forme de chaîne de texte en clair. Résoudre ce problème n’est pas pratique.

(Évidemment, le soi-disant correctif suggéré par Fortify ne fonctionne clairement pas. Et il ne remarque pas que votre appel à setPassword(env.getProperty("spring.datasource.password")) est simplement "mauvais" pour ce que vous faites actuellement. C'est de la "sécurité des performances".. .)

La solution la plus pratique est d'indiquer au scanner qu'il s'agit d'un "faux positif". Prenez ensuite des mesures pour empêcher les pirates d'attacher un débogueur, de vérifier la RAM, les vidages de mémoire, d'échanger des disques, etc., et de rechercher dans le tas un objet String pouvant représenter un mot de passe.

Il existe également une solution "méchante" qui nécessite Stringécraser via l'abstraction de type de l'objet et remplacer son tableau de support. Mais cette approche est fragile.

    La représentation de
  • String 的表示形式在 Java 的生命周期中已更改多次,每次更改都可能会破坏您的 String a changé plusieurs fois au cours de la vie de Java, et chaque changement peut casser votre code de couverture
  • .
  • String 的后备数组会与其他 StringDans certains cas, le tableau de sauvegarde de
  • est partagé avec d'autres objets
  • , et la destruction du tableau de sauvegarde corrompt ces objets. String可能已被复制或插入到其他 String
  • Il y a un problème pour trouver tous les cas où un mot de passe

aurait pu avoir été copié ou inséré dans un autre objet.

🎜 🎜À moins que vous n'ayez affaire à des 🎜informations confidentielles🎜, c'est (OMI) exagéré. Si vous traitez des informations confidentielles, veuillez sécuriser votre plateforme avant de prendre ces mesures. (Et ne comptez pas sur un stupide logiciel d’analyse de sécurité pour les audits de sécurité !) 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer