https://chacker.pl/
Zasada propagacji skażenia systemu DTA opisuje sposób, w jaki system propaguje skażenie i łączy kolory skażenia, jeśli wiele przepływów skażenia przebiega jednocześnie. Tabela 10-1 pokazuje, jak skażenie rozprzestrzenia się przez kilka różnych operacji w przykładowej zasadzie propagacji skażenia dla systemu DTA z dokładnością do bajtów i dwoma kolorami: „czerwonym” (R) i „niebieskim” (B). Wszystkie operandy w przykładach składają się z 4 bajtów. Należy pamiętać, że możliwe są inne zasady propagacji skażenia, szczególnie w przypadku złożonych operacji, które wykonują nieliniowe transformacje na swoich operandach.
Przykłady propagacji skażenia dla systemu DTA o granularności bajtów z dwoma kolorami: czerwonym (R) i niebieskim (B)

W pierwszym przykładzie wartość zmiennej a jest przypisywana zmiennej c (1), co odpowiada instrukcji mov x86. W przypadku prostych operacji, takich jak ta, reguły propagacji skażenia są również proste: ponieważ wyjście c jest po prostu kopią a, informacja o skażeniu dla c jest kopią informacji o skażeniu a. Innymi słowy, operatorem scalania skażeń w tym przypadku jest :=, operator przypisania. Następnym przykładem jest operacja xor, c = a ⊕ b (2). W tym przypadku nie ma sensu po prostu przypisywać skażenia z jednego z operandów wejściowych do wyjścia, ponieważ wyjście zależy od obu wejść. Zamiast tego, powszechną strategią skażenia jest pobieranie sumy bajt po bajcie (∪) skażenia operandów wejściowych. Na przykład, najbardziej znaczący bajt pierwszego operandu jest skażony na czerwono (R), a w drugim operandzie na niebiesko (B). Zatem skazą najbardziej znaczącego bajtu wyjściowego jest suma tych bajtów, oznaczonych kolorem czerwonym i niebieskim (RB). Ta sama polityka sumowania bajt po bajcie jest stosowana do dodawania w trzecim przykładzie (3). Należy zauważyć, że w przypadku dodawania istnieje przypadek skrajny: dodanie 2 bajtów może spowodować przepełnienie bitu, który przepływa do najmniej znaczącego bitu (LSB) sąsiedniego bajtu. Załóżmy, że atakujący kontroluje tylko najmniej znaczący bajt jednego z operandów. Wówczas, w tym przypadku skrajnym, atakujący może spowodować przepełnienie 1 bitu do sąsiedniego bajtu, co pozwoli mu również częściowo wpłynąć na wartość tego bajtu. Można uwzględnić ten przypadek skrajny w polityce skazy, dodając jawne sprawdzenie i skazując sąsiedni bajt w przypadku wystąpienia przepełnienia. W praktyce wiele systemów DTA nie sprawdza tego przypadku skrajnego, aby prostsza i szybsza propagacja skazy była łatwiejsza. Przykład (4) jest szczególnym przypadkiem operacji xor. Biorąc xor operandu z samym sobą (c = a ⊕ a) zawsze daje na wyjściu zero. W tym przypadku, nawet jeśli atakujący kontroluje a, nadal nie będzie miał kontroli nad wyjściem c. Polityka skażenia polega zatem na usunięciu skażenia każdego bajtu wyjściowego poprzez ustawienie go na zbiór pusty (∅). Następnie wykonuje się operację przesunięcia w lewo o stałą wartość, c = a ≪ 6 (5). Ponieważ drugi operand jest stały, atakujący nie zawsze może kontrolować wszystkie bajty wyjściowe, nawet jeśli częściowo kontroluje wejście a. Rozsądną polityką jest propagowanie skażenia wejściowego tylko do tych bajtów wyjścia, które są (częściowo lub całkowicie) pokryte jednym ze skażonych bajtów wejściowych, w efekcie „przesuwając skażenie w lewo”. W tym przykładzie, ponieważ atakujący kontroluje tylko dolny bajt a i jest on przesunięty w lewo o 6 bitów, oznacza to, że skażenie z dolnego bajtu rozprzestrzenia się na dwa dolne bajty wyjścia. Z drugiej strony, w przykładzie (6), zarówno wartość, która jest przesunięta (a), jak i wartość przesunięcia (b), są zmienne. Atakujący, który kontroluje b, jak w przykładzie, może wpłynąć na wszystkie bajty danych wyjściowych. W ten sposób skaza b jest przypisywana do każdego bajtu wyjściowego. Biblioteki DTA, takie jak libdft, mają predefiniowaną politykę skażenia, co oszczędza Ci kłopotu z implementacją reguł dla wszystkich typów instrukcji. Możesz jednak modyfikować reguły dla każdego narzędzia osobno, dla tych instrukcji, dla których domyślna polityka nie do końca odpowiada Twoim potrzebom. Na przykład, jeśli wdrażasz narzędzie przeznaczone do wykrywania wycieków informacji, możesz chcieć poprawić wydajność, wyłączając propagację skazy poprzez instrukcje, które zmieniają dane nie do poznania.