Luknja v podpisovanju: tudi jaz sem Apple

Matej Huš

12. jun 2018 ob 22:02:02

V varnostnih programih tretjih proizvajalcev za macOS je kar 11 let tičala luknja, ki je aplikacijam omogočala, da so se predstavljale kot podpisane z Applove strani. Digitalni podpisi aplikacij so eden izmed osnovnih varnostnih mehanizmov, saj lahko za podpisano aplikacijo trdimo, da zagotovo v nespremenjeni obliki izvira od podpisnika. Podpisovanje je kriptografsko močno in ga ni mogoče ponarediti, lahko pa se zatakne pri preverjanju. Novoodkrita luknja je zlonamerni kodi omogočala, da je obšla postopek preverjanja in se predstavila kot legitimna Applova programska oprema. Ker številni protivirusni in drugi zaščitni programi to informacijo uporabljajo pri zaznavanju zlonamerne programske opreme, se je ta z izkoriščanjem luknje lahko pritihotapila na računalnik.

Kot razkriva Josh Pitts, luknja ni ranljivost v kodi macOS, temveč nejasna dokumentacija in napačna uporaba klicev API, ki so jih napak uporabljali VirusTotal, Facebook OSQuery, Google Santa, F-Secure, Yelp in drugi programih tretjih proizvajalcev. Če je bila zlonamerna aplikacija v binarnem formatu (Fat Binary), ki je imel podporo za več arhitektur procesorjev, na katerih lahko teče macOS (npr. i386, x86_64, PPC), je zadostovalo že, če je bila podpisana prva datoteka Mach-O. V tem primeru so prizadeti programi razumeli, da je podpisan cel arhiv, kar seveda ne drži. Marsikod je dovoljeno poganjanje aplikacij (whitelisting), ki jih kateri izmed opisanih pripomočkov prepozna kot podpisane, zaradi česar je omenjeni hrošč varnostna luknja.

Da je lažno podpisovanje problem, smo vedeli že ob napadu virusa Stuxnet. V konkretnem primeru pa ne gre niti za lažno podpisovanje, za kar bi morali napadalci ukrasti Applove certifikate, temveč za pretvarjanje zaradi napačne implementacije. Ranljivi so programi za OS X Leopard in novejše. V Mac OS X vgrajena orodja teh težav nimajo, ranljivi so zgolj omenjeni pripomočki tretjih proizvajalcev, ki pa so široko razširjeni. Popravki so že na voljo.