-
Notifications
You must be signed in to change notification settings - Fork 477
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Page Fault at entry 0x0 in table page table #222
Comments
Can you please paste the full backtrace? That way I can see the lines of code that caused the fault. |
@atcuno Yes, of course, here you go (only modified the paths ;-) ):
|
Ok thanks, I see its at: https://github.com/volatilityfoundation/volatility3/blob/master/volatility/framework/symbols/linux/extensions/__init__.py#L293 I will get a patch in for that today. If you are comfortable coding, you can patch yourself in the meantime by putting the "link = " in a try/except, with catching "exceptions.PagedInvalidAddressException" and then "return" in the except block. |
Interesting, thanks! try:
link = getattr(self, direction).dereference()
except exceptions.PagedInvalidAddressException:
return and indeed the error and trace are gone! I subsequently tried all
output nothing apart from the column headers. Is that expected? I then went on and tried
Furthermore, also
That feels like something is wrong (but I don't have a clue what this might be, the symbols should match since both kernels and symbols came from Debian upstream, and |
It seems like there are a couple things here. @olifre - would be up for testing this sample with Volatility 2 and see if linux_pslist produces a process list? You will need to make a custom profile, but it seems like you have the needed files since you made a Volatility 3 one. It currently seems like either the sample is really corrupt or that our translation layer for parsing the ELF file is wrong. The comparison with Volatility 2 would really help determine that. The "good" news here is that your sample is triggering smear-related bugs in plugins that we need to fix. @ikelos looking at the system call backtrace, the bug comes from this line when the array is enumerated: https://github.com/volatilityfoundation/volatility3/blob/master/volatility/framework/plugins/linux/check_syscall.py#L156 What do you propose as the best fix? I could check that "tableaddr" is a valid address, but that would cover only where the table starts. If it ever crossed page boundaries, that would not be a complete check. It really seems like vmlinux.object() should throw an exception if the object is asked for on page(s) needed to read the data structure, but definitely want to hear your thoughts and also what the code should look like to correctly handle this. @ikelos - it seems the same root cause on this line: Is what also leads to afinfo backtracing. |
I'd like to know if this is a corrupted image or not before we spend time trying to "fix" something that may well not be broken. You know my views on silently dropping bad values in an attempt to be helpful to users, it must be clear that this is not perfect information and that something is very definitely "up" with the results we're returning. I don't like papering over errors except in extreme situations where the remaining output would be more beneficial than ending the plugin and where the fact that something went awry is clearly indicated to the user (in this instance, getting a blank list would have been harder for us to debug and of no use to the user in determining that something was wrong). I want to stress again backtraces are not necessarily bugs. |
That's interesting. Volatility2 tells me:
Let me know if you need all lines. Feels like it does not like the ELF format? As stated, the dump is created with |
Unhandled page faults are definitely bugs in our code, and plugins not being able to know if an object they instantiated is valid or not makes reliable programming extremely hard-to-impossible to do. Analysts that get results like empty/short process lists and such will notice like what happened in this ticket. |
@olifre Could you please apply this patch to your vol2 code and then re-run:
It should cause a full backtrace to be printed where you are currently getting one line with: "DEBUG : volatility.debug : Failed instantiating (exception): 'comm'" that is not an expected exception. Please paste the full backtrace you get. |
@atcuno Here you go:
That's Python 2.7.18 (in case it matters). |
Ok the profile is definitely broken if you are getting that error. task_struct has a "comm" member in all versions of Linux going back to the beginning. Could you upload the profile you made, and did you follow this for the Volatility 2 profile? https://github.com/volatilityfoundation/volatility/wiki/Linux#creating-a-new-profile |
@atcuno Argh, my bad! To summarize: When following the instructions you linked (did that before), I hit:
For Volatility 3, I just fed the For Volatility 2, I forgot to run I did now do that and rezipped things. Here's the new trace I get:
So I'm now running into volatilityfoundation/volatility#638 , right? |
@olifre can you git pull volatility 2 and try to run again with that profile? I updated for the dwarf.py issue. Also, be aware, plugins might be really slow to run since your profile is based on the full kernel image and not just what module.c produces. The output will be the same, just know it might take a long time per plugin run. The main goal for now is just to see if you get a process list from Vol2 though. |
@atcuno I certainly get further this time! Sadly, it still seems unhappy in
|
Okay, lets move the discussion to volatilityfoundation/volatility#638 for now. We will come back to this ticket once we sort the Vol2 part. |
As additional information: I have tried the very same approach (using |
This issue is stale because it has been open for 200 days with no activity. |
This issue was closed because it has been inactive for 60 days since being marked as stale. |
This issue is still relevant, I sadly just missed the first stalebot-notification since I get so many stalebot notifications these days over and over again. |
Sure, no problem. I don't know if the vol2 part of the problem has been solved yet? It seems like that's still open even though volatility 2 is getting less attention these days. Not sure if there's still something to progress on the vol 3 front? @atcuno any update on this? |
This issue is stale because it has been open for 200 days with no activity. |
This issue was closed because it has been inactive for 60 days since being marked as stale. |
Describe the bug
Creating a dump with:
reveals a file of type:
The system was running Debian with
linux-image-3.16.0-7-686-pae:i386
, from the3.16.59-1
package. I extracted the correspondingdbg
package and ran the latestdwarf2json
(built from HEAD) on the debug symbol file shipped by Debian (so kernel and debug file should exactly match).Running volatility:
It also happens when re-taking the dump after letting the machine run for a while, with the exact same address.
Context
Volatility Version: 69be215
Operating System: Gentoo Linux x86_64 (but also reproducible e.g. on Kali)
Python Version: 3.7.7
Suspected Operating System: Debian 8 / Jessie
Command: Any command inspecting the image
The text was updated successfully, but these errors were encountered: