METODO DI OVERRIDING UTILIZZANDO EREDITÀ
Se stiamo parlando esclusivamente dell'utilizzo dell'ereditarietà per sovrascrivere il metodo su un'applicazione esistente a cui non si ha accesso al codice sorgente, @objlass è un po 'fuori tema.
Questo perché se si crea una nuova classe che ne estende una nuova e si sovrascrive un metodo e lo si inserisce nella cartella delle classi dell'applicazione in esecuzione, non accadrà nulla. Questo sta considerando che non stai facendo cose complesse, lecando la decompilazione e modificando il codice esistente.
Tuttavia, se hai un DI Manager come Spring, puoi modificare la classe iniettata modificando il file XML e così puoi sostituire il tuo bean con quello originale.
pointcut
Anche un altro tipo di attacchi non è un metodo prevalente, aggiungendo i punti di riferimento usando l'aspetto, anche in questo caso l'uso di framework come Spring.
Per la sicurezza dell'applicazione, ho solo sentito dire che alcuni progetti vietano qualsiasi libreria aggiungendo la capacità di aggiungere punti tagliati usando aspetti.
Il fatto che in Java sia più facile inserire il codice non significa molto, si può solo considerare che se qualcuno è in grado di accedere al proprio server delle applicazioni, il server è corrotto.
CARTOLINA ENDOERSED CLASSE OVERRIDING
Un altro modo di hackerare sarebbe usare il meccanismo approvato di Java, è un posto specifico dove tutti i JAR che vengono messi qui hanno la precedenza su tutti gli altri. Questo significa che puoi sovrascrivere anche tipo Java.lang.String. Oppure invece di derivare una classe per sostituirla o aggiungere pointcut, puoi semplicemente ottenere la classe (o codice sorgente o decompile .class) modificarla, compilarla, inserirla in un JAR e inserirla nella cartella approvata.
Si noti che Apache Tomcat per esempio possiede già una cartella "approvata" utilizzata per sovrascrivere qualsiasi libreria di cui ha bisogno internamente per avere la versione corretta delle classi. potresti semplicemente aprire uno di quei JARS e aggiungere la tua classe all'interno.
PROTEGGE CONTRO QUESTI METODI
Come dovrebbe essere rilevato da un amministratore di sistema? Beh, in effetti ho visto una soluzione piuttosto semplice: uno script che periodicamente (cron ...: p) controlla se qualsiasi file sul server (si aspettano registri che sono spostati su / var / log o altro) è cambiato e lo segnala al sysadmin in caso affermativo.
Perché qualunque sia il modo in cui lo stai facendo, se non puoi cambiare il codice sorgente prima che vada sul server, dovrai modificare i file e rilevare che è in effetti piuttosto semplice.
Per andare oltre, puoi usare gli hash di calcolo md5 (e controllare ancora la dimensione del file!) di tutti i file del tuo server e dello script in esecuzione (nel caso qualcuno provasse ad aggiungere una cartella esterna al classpath).
Infine quello che ho detto qui è abbastanza semplice da implementare, probabilmente ci sono modi ancora più intelligenti per farlo, ma non ho le conoscenze necessarie per questo.
EDIT:
Grazie a @ojblass per segnalare che c'è un pacchetto chiamato Tripwire che guarderà i file / directory per te ed eseguirà il comando che vuoi quando qualcosa si è verificato.