వోర్సెస్టర్ పాలిటెక్నిక్ ఇన్స్టిట్యూట్ (USA) పరిశోధకులు కొత్త రకం మేహెమ్ దాడిని ప్రవేశపెట్టారు, ఇది ప్రామాణీకరణ మరియు భద్రతా తనిఖీలు ఉన్నాయో లేదో నిర్ణయించడానికి ప్రోగ్రామ్లో ఫ్లాగ్లుగా ఉపయోగించే స్టాక్ వేరియబుల్స్ యొక్క విలువలను మార్చడానికి Rowhammer డైనమిక్ రాండమ్ యాక్సెస్ మెమరీ బిట్ డిస్టార్షన్ టెక్నిక్ను ఉపయోగిస్తుంది. పాసయ్యాడు. దాడి యొక్క ఆచరణాత్మక ఉదాహరణలు SUDO, OpenSSH మరియు MySQL లలో ప్రమాణీకరణను దాటవేయడానికి, అలాగే OpenSSL లైబ్రరీలో భద్రతా సంబంధిత తనిఖీల ఫలితాన్ని మార్చడానికి ప్రదర్శించబడ్డాయి.
సున్నాకి భిన్నంగా ఉండే విలువలను సరిపోల్చడానికి తనిఖీలను ఉపయోగించే అప్లికేషన్లకు దాడిని అన్వయించవచ్చు. హాని కలిగించే కోడ్ యొక్క ఉదాహరణ: int auth = 0; ... // ధృవీకరణ కోడ్ విజయవంతమైన ప్రామాణీకరణ విషయంలో (auth != 0) AUTH_SUCCESSని తిరిగి ఇచ్చిన సందర్భంలో ప్రమాణీకరణ విలువను మారుస్తుంది; లేకపోతే AUTH_FAILUREని తిరిగి ఇవ్వండి;
ఈ ఉదాహరణ సందర్భంలో, విజయవంతమైన దాడి కోసం స్టాక్లోని 32-బిట్ ప్రామాణీకరణ వేరియబుల్తో అనుబంధించబడిన మెమరీలో ఏదైనా బిట్ను పాడు చేస్తే సరిపోతుంది. వేరియబుల్లోని ఏదైనా బిట్ పాడైనట్లయితే, విలువ ఇకపై సున్నాగా ఉండదు మరియు నియత ఆపరేటర్ ప్రామాణీకరణను విజయవంతంగా పూర్తి చేయడాన్ని నిర్ణయిస్తారు. ఇటువంటి ధృవీకరణ నమూనాలు అప్లికేషన్లలో చాలా సాధారణం మరియు ఉదాహరణకు, SUDO, OpenSSH, MySQL మరియు OpenSSLలలో కనిపిస్తాయి.
"if(auth == 1)" ఫారమ్ యొక్క పోలికలకు కూడా దాడిని అన్వయించవచ్చు, అయితే ఈ సందర్భంలో దాని అమలు మరింత క్లిష్టంగా మారుతుంది, ఎందుకంటే ఇది 32 బిట్ను కాకుండా చివరి బిట్ను వక్రీకరించడం అవసరం. ప్రాసెసర్ రిజిస్టర్లలోని వేరియబుల్స్ విలువలను ప్రభావితం చేయడానికి కూడా ఈ పద్ధతిని ఉపయోగించవచ్చు, ఎందుకంటే రిజిస్టర్ల కంటెంట్లు కాంటెక్స్ట్ స్విచ్, ఫంక్షన్ కాల్ లేదా సిగ్నల్ హ్యాండ్లర్ కాల్పులు జరిపినప్పుడు స్టాక్పై తాత్కాలికంగా ఫ్లష్ చేయబడతాయి. రిజిస్టర్ విలువలు మెమరీలో ఉన్న సమయంలో, ఈ మెమరీలో వక్రీకరణలను ప్రవేశపెట్టవచ్చు మరియు మార్చబడిన విలువ రిజిస్టర్కు పునరుద్ధరించబడుతుంది.
బిట్లను వక్రీకరించడానికి, RowHammer తరగతి దాడి యొక్క మార్పులలో ఒకటి ఉపయోగించబడుతుంది. DRAM మెమరీ అనేది రెండు-డైమెన్షనల్ శ్రేణి కణాల శ్రేణి కాబట్టి, ప్రతి ఒక్కటి కెపాసిటర్ మరియు ట్రాన్సిస్టర్తో కూడి ఉంటుంది, అదే మెమరీ ప్రాంతం యొక్క నిరంతర రీడ్లను చేయడం వలన వోల్టేజ్ హెచ్చుతగ్గులు మరియు క్రమరాహిత్యాలు పొరుగు కణాలలో ఛార్జ్ తగ్గడానికి కారణమవుతాయి. పఠన తీవ్రత ఎక్కువగా ఉంటే, పొరుగు సెల్ తగినంత పెద్ద మొత్తంలో ఛార్జ్ను కోల్పోవచ్చు మరియు తదుపరి పునరుత్పత్తి చక్రం దాని అసలు స్థితిని పునరుద్ధరించడానికి సమయం ఉండదు, ఇది సెల్లో నిల్వ చేయబడిన డేటా విలువలో మార్పుకు దారి తీస్తుంది. . RowHammer నుండి రక్షించడానికి, చిప్ తయారీదారులు TRR (టార్గెట్ రో రిఫ్రెష్) మెకానిజంను జోడించారు, ఇది ప్రత్యేక సందర్భాలలో సెల్ అవినీతిని నిరోధిస్తుంది, కానీ సాధ్యమయ్యే అన్ని దాడి వైవిధ్యాల నుండి రక్షించదు.
అల్లకల్లోలం దాడి నుండి రక్షించడానికి, సున్నా నుండి వ్యత్యాసాల మూల్యాంకనం లేదా ఒకదానితో యాదృచ్ఛికం కాకుండా, సున్నా కాని ఆక్టేట్లతో యాదృచ్ఛిక విత్తన విలువను ఉపయోగించి మ్యాచ్ చెక్ని ఉపయోగించమని సిఫార్సు చేయబడింది. ఈ సందర్భంలో, వేరియబుల్ యొక్క కావలసిన విలువను సెట్ చేయడానికి, ఒక బిట్ యొక్క వక్రీకరణకు విరుద్ధంగా, అవాస్తవికమైన గణనీయమైన సంఖ్యలో బిట్లను ఖచ్చితంగా వక్రీకరించడం అవసరం. దాడి చేయలేని కోడ్ యొక్క ఉదాహరణ: int auth = 0xbe406d1a; ... // ధృవీకరణ కోడ్ విజయవంతమైన ప్రామాణీకరణ విషయంలో (auth == 0x23ab8701) AUTH_SUCCESSని తిరిగి ఇస్తే ప్రమాణ విలువను 0x23ab8701కి సెట్ చేస్తుంది; లేకపోతే AUTH_FAILUREని తిరిగి ఇవ్వండి;
పేర్కొన్న రక్షణ పద్ధతి ఇప్పటికే సుడో డెవలపర్లచే ఉపయోగించబడింది మరియు CVE-1.9.15-2023 దుర్బలత్వానికి పరిష్కారంగా విడుదల 42465లో చేర్చబడింది. ప్రధాన హాని కలిగించే ప్రాజెక్ట్లకు పరిష్కారాలు చేసిన తర్వాత దాడిని నిర్వహించడానికి కోడ్ యొక్క నమూనాను ప్రచురించాలని వారు ప్లాన్ చేస్తున్నారు.
మూలం: opennet.ru