AWS - Abusing Lambda Extensions
Last updated
Last updated
Lambda-uitbreidings verbeter funksies deur te integreer met verskeie monitoring, waarneming, sekuriteit, en bestuurstelsels. Hierdie uitbreidings, toegevoeg via .zip-argiewe met behulp van Lambda-laag of ingesluit in houerbeeldimplementasies, werk in twee modusse: interne en eksterne.
Interne uitbreidings smelt saam met die uitvoeringsproses, deur sy aanvang te manipuleer met behulp van taalspesifieke omgewingsveranderlikes en omhulselkripte. Hierdie aanpassing geld vir 'n verskeidenheid van uitvoeringstye, insluitend Java Correto 8 en 11, Node.js 10 en 12, en .NET Core 3.1.
Eksterne uitbreidings loop as afsonderlike prosesse, wat bedryfsafstemming handhaaf met die Lambda-funksie se lewensiklus. Hulle is verenigbaar met verskeie uitvoeringstye soos Node.js 10 en 12, Python 3.7 en 3.8, Ruby 2.5 en 2.7, Java Corretto 8 en 11, .NET Core 3.1, en aangepaste uitvoeringstye.
Vir meer inligting oor hoe lambda-uitbreidings werk, kyk na die dokumente.
Dit is 'n opsomming van die tegniek wat voorgestel word in hierdie pos: https://www.clearvector.com/blog/lambda-spy/
Daar is bevind dat die verstek Linux-kernel in die Lambda-uitvoeringomgewing saamgestel is met "process_vm_readv" en "process_vm_writev" stelseloproepe. En alle prosesse loop met dieselfde gebruikers-ID, selfs die nuwe proses wat geskep is vir die eksterne uitbreiding. Dit beteken dat 'n eksterne uitbreiding volle lees- en skryftoegang tot Rapid se heap-geheue het, volgens ontwerp.
Verder, terwyl Lambda-uitbreidings die vermoë het om te inteken op oproepgebeure, onthul AWS nie die rou data aan hierdie uitbreidings nie. Dit verseker dat uitbreidings nie toegang het tot sensitiewe inligting wat oorgedra word via die HTTP-versoek nie.
Die Init (Rapid) proses monitor alle API-versoeke by http://127.0.0.1:9001 terwyl Lambda-uitbreidings geïnisialiseer en uitgevoer word voor die uitvoering van enige uitvoeringstyd-kode, maar na Rapid.
Die veranderlike AWS_LAMBDA_RUNTIME_API
dui die IP-adres en poortnommer van die Rapid API aan kind-uitvoeringstydprosesse en addisionele uitbreidings.
Deur die AWS_LAMBDA_RUNTIME_API
-omgewingsveranderlike te verander na 'n poort
waartoe ons toegang het, is dit moontlik om alle aksies binne die Lambda-uitvoering te onderskep (man-in-die-middel). Dit is moontlik omdat die uitbreiding met dieselfde regte as Rapid Init loop, en die stelsel se kernel toelaat vir wysiging van prosesgeheue, wat die verandering van die poortnommer moontlik maak.
Omdat uitbreidings voor enige uitvoeringstyd-kode loop, sal die wysiging van die omgewingsveranderlike die uitvoeringstydproses (bv., Python, Java, Node, Ruby) beïnvloed wanneer dit begin. Verder sal uitbreidings wat na ons gelaai is, wat staatmaak op hierdie veranderlike, ook deur ons uitbreiding roeteer. Hierdie opstelling kan dit moontlik maak vir malware om heeltemal sekuriteitsmaatreëls of loguitbreidings direk binne die uitvoeringomgewing te vermy.
Die instrument lambda-spy is geskep om daardie geheue skryf en sensitiewe inligting steel van lambda-versoeke, ander uitbreidingsversoeke en selfs hulle wysig.