Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Wykorzystanie sterownika Capcom w bezpieczny sposób
#11
@ can1357 Co gwarantuje, że Twój kod nie kończy się z timelice, gdy uruchamiasz z włączonymi przerwaniami? Czy to nie bsod ryzyka, jeśli ustawi się bit smep? Również ta sytuacja mogłaby powstać, prawdopodobnie nie? https://blogs.msdn.microsoft.com/old...06-00/?p=24573 Zacytować: Jeśli naprawdę chcesz zablokować pamięć, możesz nadać temu procesowi uprawnienie SeLockMemoryPrivilege i użyć funkcji AWE do przydzielenia pamięci niestronicowanej. Pamiętaj, że jest to powszechnie uważane za działanie antyspołeczne w systemie przywoławczym. Przepraszam, jeśli to głupie pytanie.
Reply
#12
Zacytować: Originally Posted by UMO @ can1357 Co gwarantuje, że Twój kod nie kończy się z timelice, gdy uruchamiasz z włączonymi przerwaniami? Czy to nie bsod ryzyka, jeśli ustawi się bit smep? Również ta sytuacja mogłaby powstać, prawdopodobnie nie? https://blogs.msdn.microsoft.com/old...06-00/?p=24573 Przepraszam, jeśli to głupie pytanie. Nie wiesz, co masz na myśli przez pierwszy punkt, ale masz rację co do VirtualLock. Mimo to VirtualLock nadal gwarantuje nam, że przed KiSystemCall64 wszystkie wskazane strony będą zablokowane. Istnieje bardzo mała szansa na stronicowanie w minimalnym odstępie czasowym pomiędzy KiSystemCall64-> NtDeviceIoControlFile-> Twoje rutyny - i tam zazwyczaj działa wątek roboczy w każdym razie - więc nie sądzę, że to jest duże kwestia.
Reply
#13
Zacytować: Originally Posted by UMO @ can1357 Co gwarantuje, że Twój kod nie kończy się z timelice, gdy uruchamiasz z włączonymi przerwaniami? Czy to nie bsod ryzyka, jeśli ustawi się bit smep? Również ta sytuacja mogłaby powstać, prawdopodobnie nie? https://blogs.msdn.microsoft.com/old...06-00/?p=24573 Przepraszam, jeśli to głupie pytanie. Nie jesteś pewien co do pierwszego pytania, ale twój drugi ma rację. Technicznie nie można nigdy wyłączyć przerwania z tego powodu i bezpiecznie wrócić do kodu po tym. Niewielkie ulepszenie wymusza załadowanie strony adresu zwrotnego przed powrotem od wywołującego wywołanie przerwań. Naprawdę kuloodporna metoda polega na tworzeniu stosu RPO, który umożliwia SMEP (może wykorzystywać do tego funkcję capcom), alokuje pulę, wykonuje memcpy i przeskakuje do niego Edycja: dostał ninja przez puszkę podczas pisania tego na telefon
Reply
#14
Pierwszy przypadek, który miałem na myśli, mógłbyś wykorzystać do przydzielenia przydzielonego programu planującego timeslice, a program planujący (pseudo scheduler w oknach, tak jak go rozumiem) powoduje przełączenie kontekstu. Łańcuch ROP wydaje się być solidny. Podobał mi się też pomysł bootstrapowania @ namazso wspomniany przy alokacji w przestrzeni jądra, jak się wydaje, ma dość minimalne ryzyko bsod z mojego zrozumienia
Reply
#15
Zacytować: Originally Posted by UMO Pierwszy przypadek, który miałem na myśli, mógłbyś wykorzystać do przydzielenia przydzielonego programu planującego timeslice, a program planujący (pseudo scheduler w oknach, tak jak go rozumiem) powoduje przełączenie kontekstu. Łańcuch ROP wydaje się być solidny. Podobał mi się też pomysł bootstrapowania @ namazso wspomniany przy alokacji w przestrzeni jądra, jak się wydaje, ma dość minimalne ryzyko bsod z mojego zrozumienia Nie przełącza kontekstu, gdy przerywniki są wyłączone. Uaktywniam tylko przerwań w pamięci jądra po włączeniu SMEP, jeśli czytasz OP, to był cały ten punkt.
Reply
#16
Zacytować: Wysłane przez can1357 pierwotnie Nie przełącza kontekstu, gdy przerywniki są wyłączone. Uaktywniam tylko przerwań w pamięci jądra po włączeniu SMEP, jeśli czytasz OP, to był cały ten punkt. Być może nie rozumiem, jak to działa, ponieważ przyczyną nie jest kod, który działa w CpCtx-> ExecuteInKernel nadal znajduje się w przestrzeni użytkownika? Jeśli znajduje się w przestrzeni jądra, gdzie / jak jest tam przydzielona? Używając małej alokacji puli? Jeśli wykonasz kod w przestrzeni użytkownika z włączonym SMEP w pierścieniu 0, co spowoduje, że sprawdzisz błąd? Jest coś, czego nie dostaję.
Reply
#17
Zacytować: Originally Posted by UMO Zgaduję, że nie było jasne, ale wskazuję, że nie możesz wywoływać kodu przestrzeni użytkownika Khk_CallPassive za pomocą tego kodu pośredniczącego, więc jeśli masz przełącznik kontekstowy, gdy próbowałeś, to zrobiłbyś błąd. Potem ponownie przeczytałem i zrozumiałem, że bts smep nie btr smep w prologu kikuta. Nie wiem nawet, jaki byłby przypadek użycia dla wywoływania trybu użytkownika z Khk_CallPassive i smep disabled, ale to z jakiegoś powodu bardzo mnie zdezorientowało. Prawdopodobnie byłem tylko głupi. Tak Khk_CallPassive jest tam, aby wywoływać funkcje jądra z wymaganiami IRQL, zdecydowanie nie kod UM: P
Reply




Users browsing this thread: 1 Guest(s)